{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c904dd05",
   "metadata": {},
   "source": [
    "# ESRGAN性能测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "a09cddbe",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/RRDB_ESRGAN_x4.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "# RRDB_ESRGAN_x4.pth\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/RRDB_ESRGAN_x4.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "60fe75fe",
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_psnr(img1, img2):\n",
    "    mse = np.mean((img1 - img2) ** 2)\n",
    "    if mse == 0:\n",
    "        return float('inf')\n",
    "    max_pixel = 255.0\n",
    "    psnr = 20 * np.log10(max_pixel / np.sqrt(mse))\n",
    "    return psnr\n",
    "\n",
    "def calculate_ssim(img1, img2):\n",
    "    C1 = (0.01 * 255) ** 2\n",
    "    C2 = (0.03 * 255) ** 2\n",
    "    img1 = img1.astype(np.float64)\n",
    "    img2 = img2.astype(np.float64)\n",
    "    kernel = cv2.getGaussianKernel(11, 1.5)\n",
    "    window = np.outer(kernel, kernel.transpose())\n",
    "    mu1 = cv2.filter2D(img1, -1, window)[5:-5, 5:-5]\n",
    "    mu2 = cv2.filter2D(img2, -1, window)[5:-5, 5:-5]\n",
    "    mu1_sq = mu1 ** 2\n",
    "    mu2_sq = mu2 ** 2\n",
    "    mu1_mu2 = mu1 * mu2\n",
    "    sigma1_sq = cv2.filter2D(img1 ** 2, -1, window)[5:-5, 5:-5] - mu1_sq\n",
    "    sigma2_sq = cv2.filter2D(img2 ** 2, -1, window)[5:-5, 5:-5] - mu2_sq\n",
    "    sigma12 = cv2.filter2D(img1 * img2, -1, window)[5:-5, 5:-5] - mu1_mu2\n",
    "    ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2))\n",
    "    return ssim_map.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "3f9ede10",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.38, SSIM = 0.1098\n",
      "Image agricultural12.png: PSNR = 28.78, SSIM = 0.6274\n",
      "Image agricultural27.png: PSNR = 28.73, SSIM = 0.2209\n",
      "Image agricultural28.png: PSNR = 28.80, SSIM = 0.2038\n",
      "Image agricultural33.png: PSNR = 30.22, SSIM = 0.4162\n",
      "Image agricultural39.png: PSNR = 30.69, SSIM = 0.7306\n",
      "Image agricultural54.png: PSNR = 30.87, SSIM = 0.5989\n",
      "Image agricultural55.png: PSNR = 34.99, SSIM = 0.7961\n",
      "Image agricultural60.png: PSNR = 29.71, SSIM = 0.6170\n",
      "Image agricultural61.png: PSNR = 30.88, SSIM = 0.9118\n",
      "Image agricultural62.png: PSNR = 28.73, SSIM = 0.1858\n",
      "Image agricultural63.png: PSNR = 30.18, SSIM = 0.3930\n",
      "Image agricultural67.png: PSNR = 27.86, SSIM = 0.1075\n",
      "Image agricultural69.png: PSNR = 27.81, SSIM = 0.0994\n",
      "Image agricultural72.png: PSNR = 27.90, SSIM = 0.1120\n",
      "Image agricultural74.png: PSNR = 29.12, SSIM = 0.3381\n",
      "Image agricultural76.png: PSNR = 29.31, SSIM = 0.5790\n",
      "Image agricultural83.png: PSNR = 28.28, SSIM = 0.1756\n",
      "Image agricultural84.png: PSNR = 28.10, SSIM = 0.1248\n",
      "Image agricultural85.png: PSNR = 28.04, SSIM = 0.1125\n",
      "Image airplane04.png: PSNR = 32.44, SSIM = 0.8276\n",
      "Image airplane09.png: PSNR = 32.38, SSIM = 0.8379\n",
      "Image airplane17.png: PSNR = 30.90, SSIM = 0.7381\n",
      "Image airplane25.png: PSNR = 33.26, SSIM = 0.8140\n",
      "Image airplane28.png: PSNR = 30.81, SSIM = 0.6465\n",
      "Image airplane29.png: PSNR = 31.00, SSIM = 0.6831\n",
      "Image airplane30.png: PSNR = 31.03, SSIM = 0.7098\n",
      "Image airplane32.png: PSNR = 31.50, SSIM = 0.6938\n",
      "Image airplane40.png: PSNR = 30.76, SSIM = 0.6652\n",
      "Image airplane48.png: PSNR = 29.92, SSIM = 0.7016\n",
      "Image airplane55.png: PSNR = 30.40, SSIM = 0.6939\n",
      "Image airplane65.png: PSNR = 29.99, SSIM = 0.6607\n",
      "Image airplane71.png: PSNR = 29.94, SSIM = 0.6258\n",
      "Image airplane74.png: PSNR = 32.56, SSIM = 0.8241\n",
      "Image airplane75.png: PSNR = 32.67, SSIM = 0.8253\n",
      "Image airplane80.png: PSNR = 35.66, SSIM = 0.9010\n",
      "Image airplane81.png: PSNR = 32.43, SSIM = 0.7843\n",
      "Image airplane85.png: PSNR = 32.83, SSIM = 0.7996\n",
      "Image airplane86.png: PSNR = 31.77, SSIM = 0.6997\n",
      "Image airplane87.png: PSNR = 30.63, SSIM = 0.7297\n",
      "Image baseballdiamond03.png: PSNR = 31.97, SSIM = 0.6889\n",
      "Image baseballdiamond04.png: PSNR = 31.26, SSIM = 0.6508\n",
      "Image baseballdiamond05.png: PSNR = 30.52, SSIM = 0.6043\n",
      "Image baseballdiamond13.png: PSNR = 30.13, SSIM = 0.5784\n",
      "Image baseballdiamond16.png: PSNR = 30.27, SSIM = 0.5506\n",
      "Image baseballdiamond24.png: PSNR = 31.56, SSIM = 0.6368\n",
      "Image baseballdiamond31.png: PSNR = 32.20, SSIM = 0.7723\n",
      "Image baseballdiamond32.png: PSNR = 35.80, SSIM = 0.8856\n",
      "Image baseballdiamond37.png: PSNR = 32.32, SSIM = 0.7832\n",
      "Image baseballdiamond40.png: PSNR = 32.15, SSIM = 0.7644\n",
      "Image baseballdiamond47.png: PSNR = 31.13, SSIM = 0.7053\n",
      "Image baseballdiamond50.png: PSNR = 31.50, SSIM = 0.7299\n",
      "Image baseballdiamond53.png: PSNR = 36.12, SSIM = 0.8928\n",
      "Image baseballdiamond58.png: PSNR = 33.49, SSIM = 0.8388\n",
      "Image baseballdiamond72.png: PSNR = 34.66, SSIM = 0.8274\n",
      "Image baseballdiamond74.png: PSNR = 35.07, SSIM = 0.8496\n",
      "Image baseballdiamond79.png: PSNR = 29.78, SSIM = 0.4795\n",
      "Image baseballdiamond81.png: PSNR = 32.42, SSIM = 0.7459\n",
      "Image baseballdiamond83.png: PSNR = 33.70, SSIM = 0.7623\n",
      "Image baseballdiamond96.png: PSNR = 33.66, SSIM = 0.8416\n",
      "Image beach02.png: PSNR = 31.26, SSIM = 0.6461\n",
      "Image beach11.png: PSNR = 36.18, SSIM = 0.8731\n",
      "Image beach13.png: PSNR = 37.89, SSIM = 0.9039\n",
      "Image beach16.png: PSNR = 40.27, SSIM = 0.9459\n",
      "Image beach19.png: PSNR = 35.03, SSIM = 0.8655\n",
      "Image beach26.png: PSNR = 37.02, SSIM = 0.8866\n",
      "Image beach46.png: PSNR = 33.13, SSIM = 0.7543\n",
      "Image beach50.png: PSNR = 35.35, SSIM = 0.8668\n",
      "Image beach54.png: PSNR = 35.22, SSIM = 0.8551\n",
      "Image beach60.png: PSNR = 32.13, SSIM = 0.7302\n",
      "Image beach72.png: PSNR = 32.93, SSIM = 0.7565\n",
      "Image beach73.png: PSNR = 31.06, SSIM = 0.6125\n",
      "Image beach76.png: PSNR = 36.70, SSIM = 0.8957\n",
      "Image beach85.png: PSNR = 35.76, SSIM = 0.8502\n",
      "Image beach86.png: PSNR = 36.41, SSIM = 0.8651\n",
      "Image beach88.png: PSNR = 36.58, SSIM = 0.8842\n",
      "Image beach89.png: PSNR = 37.66, SSIM = 0.8984\n",
      "Image beach94.png: PSNR = 31.56, SSIM = 0.7030\n",
      "Image beach97.png: PSNR = 31.58, SSIM = 0.7117\n",
      "Image beach99.png: PSNR = 31.60, SSIM = 0.6984\n",
      "Image buildings27.png: PSNR = 31.02, SSIM = 0.6905\n",
      "Image buildings32.png: PSNR = 29.83, SSIM = 0.6118\n",
      "Image buildings34.png: PSNR = 34.08, SSIM = 0.8766\n",
      "Image buildings35.png: PSNR = 31.51, SSIM = 0.7778\n",
      "Image buildings36.png: PSNR = 29.69, SSIM = 0.6200\n",
      "Image buildings44.png: PSNR = 29.47, SSIM = 0.6195\n",
      "Image buildings45.png: PSNR = 31.05, SSIM = 0.7479\n",
      "Image buildings46.png: PSNR = 29.84, SSIM = 0.6479\n",
      "Image buildings51.png: PSNR = 30.70, SSIM = 0.7356\n",
      "Image buildings52.png: PSNR = 36.19, SSIM = 0.9401\n",
      "Image buildings56.png: PSNR = 29.91, SSIM = 0.6180\n",
      "Image buildings63.png: PSNR = 31.24, SSIM = 0.7699\n",
      "Image buildings64.png: PSNR = 31.60, SSIM = 0.7954\n",
      "Image buildings65.png: PSNR = 33.59, SSIM = 0.8346\n",
      "Image buildings69.png: PSNR = 33.12, SSIM = 0.8740\n",
      "Image buildings73.png: PSNR = 32.25, SSIM = 0.8389\n",
      "Image buildings74.png: PSNR = 31.60, SSIM = 0.7878\n",
      "Image buildings79.png: PSNR = 29.29, SSIM = 0.5493\n",
      "Image buildings89.png: PSNR = 30.82, SSIM = 0.7363\n",
      "Image buildings93.png: PSNR = 30.06, SSIM = 0.6486\n",
      "Image chaparral09.png: PSNR = 29.79, SSIM = 0.7146\n",
      "Image chaparral15.png: PSNR = 30.48, SSIM = 0.7746\n",
      "Image chaparral17.png: PSNR = 31.61, SSIM = 0.7549\n",
      "Image chaparral23.png: PSNR = 29.72, SSIM = 0.7327\n",
      "Image chaparral26.png: PSNR = 29.61, SSIM = 0.6662\n",
      "Image chaparral33.png: PSNR = 30.39, SSIM = 0.7758\n",
      "Image chaparral37.png: PSNR = 30.24, SSIM = 0.7723\n",
      "Image chaparral42.png: PSNR = 28.79, SSIM = 0.4261\n",
      "Image chaparral43.png: PSNR = 30.25, SSIM = 0.7056\n",
      "Image chaparral50.png: PSNR = 29.51, SSIM = 0.6562\n",
      "Image chaparral55.png: PSNR = 29.61, SSIM = 0.7334\n",
      "Image chaparral61.png: PSNR = 28.08, SSIM = 0.1558\n",
      "Image chaparral63.png: PSNR = 28.11, SSIM = 0.1738\n",
      "Image chaparral64.png: PSNR = 28.04, SSIM = 0.1854\n",
      "Image chaparral68.png: PSNR = 30.02, SSIM = 0.7634\n",
      "Image chaparral71.png: PSNR = 29.67, SSIM = 0.6879\n",
      "Image chaparral80.png: PSNR = 29.29, SSIM = 0.5968\n",
      "Image chaparral83.png: PSNR = 29.25, SSIM = 0.6294\n",
      "Image chaparral88.png: PSNR = 30.75, SSIM = 0.7567\n",
      "Image chaparral99.png: PSNR = 29.15, SSIM = 0.6647\n",
      "Image denseresidential02.png: PSNR = 30.50, SSIM = 0.7993\n",
      "Image denseresidential12.png: PSNR = 30.65, SSIM = 0.8221\n",
      "Image denseresidential14.png: PSNR = 29.37, SSIM = 0.6301\n",
      "Image denseresidential15.png: PSNR = 29.50, SSIM = 0.6809\n",
      "Image denseresidential29.png: PSNR = 29.30, SSIM = 0.5872\n",
      "Image denseresidential31.png: PSNR = 29.90, SSIM = 0.7027\n",
      "Image denseresidential34.png: PSNR = 30.71, SSIM = 0.6888\n",
      "Image denseresidential38.png: PSNR = 30.01, SSIM = 0.6647\n",
      "Image denseresidential46.png: PSNR = 30.46, SSIM = 0.7529\n",
      "Image denseresidential53.png: PSNR = 29.82, SSIM = 0.6277\n",
      "Image denseresidential60.png: PSNR = 29.66, SSIM = 0.6769\n",
      "Image denseresidential64.png: PSNR = 30.36, SSIM = 0.7669\n",
      "Image denseresidential65.png: PSNR = 29.69, SSIM = 0.6489\n",
      "Image denseresidential68.png: PSNR = 29.84, SSIM = 0.6574\n",
      "Image denseresidential75.png: PSNR = 30.45, SSIM = 0.7344\n",
      "Image denseresidential88.png: PSNR = 31.10, SSIM = 0.7240\n",
      "Image denseresidential89.png: PSNR = 30.78, SSIM = 0.6974\n",
      "Image denseresidential91.png: PSNR = 31.17, SSIM = 0.7365\n",
      "Image denseresidential96.png: PSNR = 30.09, SSIM = 0.6870\n",
      "Image denseresidential97.png: PSNR = 30.28, SSIM = 0.7029\n",
      "Image forest08.png: PSNR = 29.08, SSIM = 0.3951\n",
      "Image forest09.png: PSNR = 29.03, SSIM = 0.4008\n",
      "Image forest10.png: PSNR = 31.01, SSIM = 0.6001\n",
      "Image forest11.png: PSNR = 30.13, SSIM = 0.5236\n",
      "Image forest12.png: PSNR = 29.92, SSIM = 0.4905\n",
      "Image forest19.png: PSNR = 28.45, SSIM = 0.3217\n",
      "Image forest20.png: PSNR = 28.20, SSIM = 0.2686\n",
      "Image forest29.png: PSNR = 29.60, SSIM = 0.5547\n",
      "Image forest34.png: PSNR = 29.29, SSIM = 0.4738\n",
      "Image forest39.png: PSNR = 29.49, SSIM = 0.4922\n",
      "Image forest45.png: PSNR = 29.56, SSIM = 0.5208\n",
      "Image forest53.png: PSNR = 29.52, SSIM = 0.5425\n",
      "Image forest56.png: PSNR = 28.97, SSIM = 0.4755\n",
      "Image forest62.png: PSNR = 30.28, SSIM = 0.7525\n",
      "Image forest69.png: PSNR = 28.78, SSIM = 0.3653\n",
      "Image forest73.png: PSNR = 28.54, SSIM = 0.2929\n",
      "Image forest74.png: PSNR = 29.08, SSIM = 0.4117\n",
      "Image forest80.png: PSNR = 29.60, SSIM = 0.4707\n",
      "Image forest84.png: PSNR = 28.78, SSIM = 0.3529\n",
      "Image forest93.png: PSNR = 28.59, SSIM = 0.3114\n",
      "Image freeway00.png: PSNR = 30.85, SSIM = 0.8106\n",
      "Image freeway03.png: PSNR = 31.10, SSIM = 0.7943\n",
      "Image freeway07.png: PSNR = 31.23, SSIM = 0.8305\n",
      "Image freeway09.png: PSNR = 32.55, SSIM = 0.8641\n",
      "Image freeway12.png: PSNR = 32.29, SSIM = 0.8379\n",
      "Image freeway25.png: PSNR = 30.68, SSIM = 0.6408\n",
      "Image freeway26.png: PSNR = 30.46, SSIM = 0.6091\n",
      "Image freeway44.png: PSNR = 29.53, SSIM = 0.4863\n",
      "Image freeway55.png: PSNR = 30.94, SSIM = 0.7510\n",
      "Image freeway64.png: PSNR = 30.65, SSIM = 0.7534\n",
      "Image freeway67.png: PSNR = 31.17, SSIM = 0.7711\n",
      "Image freeway71.png: PSNR = 32.03, SSIM = 0.8133\n",
      "Image freeway74.png: PSNR = 33.07, SSIM = 0.8371\n",
      "Image freeway75.png: PSNR = 32.93, SSIM = 0.8488\n",
      "Image freeway76.png: PSNR = 30.43, SSIM = 0.7385\n",
      "Image freeway77.png: PSNR = 31.43, SSIM = 0.7873\n",
      "Image freeway78.png: PSNR = 32.35, SSIM = 0.8200\n",
      "Image freeway87.png: PSNR = 28.36, SSIM = 0.2762\n",
      "Image freeway92.png: PSNR = 31.89, SSIM = 0.7677\n",
      "Image freeway93.png: PSNR = 30.23, SSIM = 0.5933\n",
      "Image golfcourse07.png: PSNR = 32.19, SSIM = 0.6979\n",
      "Image golfcourse08.png: PSNR = 31.72, SSIM = 0.6597\n",
      "Image golfcourse14.png: PSNR = 32.66, SSIM = 0.7262\n",
      "Image golfcourse17.png: PSNR = 33.75, SSIM = 0.7706\n",
      "Image golfcourse18.png: PSNR = 32.11, SSIM = 0.6969\n",
      "Image golfcourse19.png: PSNR = 30.46, SSIM = 0.5995\n",
      "Image golfcourse24.png: PSNR = 30.73, SSIM = 0.6436\n",
      "Image golfcourse27.png: PSNR = 30.72, SSIM = 0.5678\n",
      "Image golfcourse33.png: PSNR = 30.67, SSIM = 0.5507\n",
      "Image golfcourse35.png: PSNR = 31.03, SSIM = 0.6039\n",
      "Image golfcourse45.png: PSNR = 34.51, SSIM = 0.8108\n",
      "Image golfcourse50.png: PSNR = 32.60, SSIM = 0.7376\n",
      "Image golfcourse52.png: PSNR = 31.44, SSIM = 0.6717\n",
      "Image golfcourse73.png: PSNR = 34.71, SSIM = 0.8391\n",
      "Image golfcourse76.png: PSNR = 31.88, SSIM = 0.7135\n",
      "Image golfcourse77.png: PSNR = 32.30, SSIM = 0.7302\n",
      "Image golfcourse78.png: PSNR = 32.73, SSIM = 0.7662\n",
      "Image golfcourse81.png: PSNR = 31.33, SSIM = 0.6575\n",
      "Image golfcourse82.png: PSNR = 31.27, SSIM = 0.6975\n",
      "Image golfcourse85.png: PSNR = 30.92, SSIM = 0.6527\n",
      "Image harbor00.png: PSNR = 31.15, SSIM = 0.7842\n",
      "Image harbor05.png: PSNR = 29.83, SSIM = 0.6872\n",
      "Image harbor13.png: PSNR = 29.28, SSIM = 0.6599\n",
      "Image harbor14.png: PSNR = 29.35, SSIM = 0.6448\n",
      "Image harbor15.png: PSNR = 29.42, SSIM = 0.6508\n",
      "Image harbor19.png: PSNR = 30.11, SSIM = 0.7228\n",
      "Image harbor22.png: PSNR = 31.19, SSIM = 0.8218\n",
      "Image harbor24.png: PSNR = 30.50, SSIM = 0.8080\n",
      "Image harbor32.png: PSNR = 32.26, SSIM = 0.8161\n",
      "Image harbor33.png: PSNR = 31.97, SSIM = 0.8044\n",
      "Image harbor35.png: PSNR = 30.75, SSIM = 0.7705\n",
      "Image harbor49.png: PSNR = 30.72, SSIM = 0.7842\n",
      "Image harbor61.png: PSNR = 29.97, SSIM = 0.7198\n",
      "Image harbor65.png: PSNR = 30.22, SSIM = 0.7057\n",
      "Image harbor67.png: PSNR = 30.91, SSIM = 0.8371\n",
      "Image harbor68.png: PSNR = 31.62, SSIM = 0.8748\n",
      "Image harbor75.png: PSNR = 31.46, SSIM = 0.8168\n",
      "Image harbor81.png: PSNR = 31.89, SSIM = 0.8585\n",
      "Image harbor83.png: PSNR = 29.98, SSIM = 0.6969\n",
      "Image harbor88.png: PSNR = 30.56, SSIM = 0.7104\n",
      "Image intersection00.png: PSNR = 31.09, SSIM = 0.7793\n",
      "Image intersection10.png: PSNR = 30.72, SSIM = 0.7653\n",
      "Image intersection16.png: PSNR = 31.68, SSIM = 0.7160\n",
      "Image intersection19.png: PSNR = 30.81, SSIM = 0.7406\n",
      "Image intersection26.png: PSNR = 31.39, SSIM = 0.7045\n",
      "Image intersection28.png: PSNR = 31.05, SSIM = 0.7373\n",
      "Image intersection29.png: PSNR = 30.76, SSIM = 0.6843\n",
      "Image intersection30.png: PSNR = 30.42, SSIM = 0.6879\n",
      "Image intersection32.png: PSNR = 30.70, SSIM = 0.7117\n",
      "Image intersection40.png: PSNR = 29.67, SSIM = 0.5867\n",
      "Image intersection43.png: PSNR = 29.37, SSIM = 0.5663\n",
      "Image intersection44.png: PSNR = 30.24, SSIM = 0.6154\n",
      "Image intersection50.png: PSNR = 31.69, SSIM = 0.7283\n",
      "Image intersection52.png: PSNR = 31.47, SSIM = 0.7230\n",
      "Image intersection70.png: PSNR = 31.67, SSIM = 0.8192\n",
      "Image intersection76.png: PSNR = 33.49, SSIM = 0.8584\n",
      "Image intersection77.png: PSNR = 33.11, SSIM = 0.8463\n",
      "Image intersection87.png: PSNR = 31.38, SSIM = 0.7189\n",
      "Image intersection89.png: PSNR = 30.79, SSIM = 0.6678\n",
      "Image intersection99.png: PSNR = 30.35, SSIM = 0.6411\n",
      "Image mediumresidential15.png: PSNR = 29.43, SSIM = 0.5599\n",
      "Image mediumresidential19.png: PSNR = 30.33, SSIM = 0.6390\n",
      "Image mediumresidential34.png: PSNR = 29.80, SSIM = 0.6658\n",
      "Image mediumresidential40.png: PSNR = 30.23, SSIM = 0.6808\n",
      "Image mediumresidential44.png: PSNR = 29.99, SSIM = 0.6503\n",
      "Image mediumresidential49.png: PSNR = 30.08, SSIM = 0.6566\n",
      "Image mediumresidential52.png: PSNR = 30.51, SSIM = 0.6770\n",
      "Image mediumresidential53.png: PSNR = 30.34, SSIM = 0.6965\n",
      "Image mediumresidential73.png: PSNR = 28.74, SSIM = 0.4732\n",
      "Image mediumresidential76.png: PSNR = 32.89, SSIM = 0.8703\n",
      "Image mediumresidential77.png: PSNR = 33.10, SSIM = 0.8521\n",
      "Image mediumresidential78.png: PSNR = 33.44, SSIM = 0.8677\n",
      "Image mediumresidential79.png: PSNR = 33.52, SSIM = 0.8689\n",
      "Image mediumresidential80.png: PSNR = 33.37, SSIM = 0.8482\n",
      "Image mediumresidential81.png: PSNR = 29.26, SSIM = 0.5908\n",
      "Image mediumresidential83.png: PSNR = 29.52, SSIM = 0.6302\n",
      "Image mediumresidential86.png: PSNR = 29.65, SSIM = 0.5789\n",
      "Image mediumresidential89.png: PSNR = 32.31, SSIM = 0.7914\n",
      "Image mediumresidential93.png: PSNR = 31.22, SSIM = 0.7307\n",
      "Image mediumresidential97.png: PSNR = 30.34, SSIM = 0.7068\n",
      "Image mobilehomepark03.png: PSNR = 29.67, SSIM = 0.6357\n",
      "Image mobilehomepark04.png: PSNR = 30.29, SSIM = 0.6717\n",
      "Image mobilehomepark05.png: PSNR = 30.24, SSIM = 0.7259\n",
      "Image mobilehomepark16.png: PSNR = 30.19, SSIM = 0.7047\n",
      "Image mobilehomepark29.png: PSNR = 30.61, SSIM = 0.7708\n",
      "Image mobilehomepark48.png: PSNR = 30.44, SSIM = 0.7732\n",
      "Image mobilehomepark49.png: PSNR = 30.90, SSIM = 0.8068\n",
      "Image mobilehomepark50.png: PSNR = 30.55, SSIM = 0.7718\n",
      "Image mobilehomepark54.png: PSNR = 31.69, SSIM = 0.8341\n",
      "Image mobilehomepark57.png: PSNR = 30.99, SSIM = 0.7866\n",
      "Image mobilehomepark59.png: PSNR = 30.27, SSIM = 0.7466\n",
      "Image mobilehomepark61.png: PSNR = 31.44, SSIM = 0.8408\n",
      "Image mobilehomepark63.png: PSNR = 31.17, SSIM = 0.8098\n",
      "Image mobilehomepark64.png: PSNR = 30.96, SSIM = 0.8108\n",
      "Image mobilehomepark77.png: PSNR = 29.62, SSIM = 0.6385\n",
      "Image mobilehomepark80.png: PSNR = 28.77, SSIM = 0.5343\n",
      "Image mobilehomepark83.png: PSNR = 28.71, SSIM = 0.5124\n",
      "Image mobilehomepark84.png: PSNR = 28.51, SSIM = 0.4369\n",
      "Image mobilehomepark93.png: PSNR = 28.74, SSIM = 0.5456\n",
      "Image mobilehomepark95.png: PSNR = 28.50, SSIM = 0.4452\n",
      "Image overpass00.png: PSNR = 30.17, SSIM = 0.6650\n",
      "Image overpass09.png: PSNR = 30.10, SSIM = 0.7233\n",
      "Image overpass18.png: PSNR = 30.97, SSIM = 0.7090\n",
      "Image overpass19.png: PSNR = 30.74, SSIM = 0.6982\n",
      "Image overpass27.png: PSNR = 28.97, SSIM = 0.4445\n",
      "Image overpass40.png: PSNR = 29.88, SSIM = 0.5867\n",
      "Image overpass54.png: PSNR = 29.01, SSIM = 0.4822\n",
      "Image overpass56.png: PSNR = 31.71, SSIM = 0.7715\n",
      "Image overpass58.png: PSNR = 30.28, SSIM = 0.6526\n",
      "Image overpass63.png: PSNR = 30.27, SSIM = 0.6916\n",
      "Image overpass66.png: PSNR = 31.33, SSIM = 0.6956\n",
      "Image overpass72.png: PSNR = 29.48, SSIM = 0.5131\n",
      "Image overpass73.png: PSNR = 29.65, SSIM = 0.5487\n",
      "Image overpass76.png: PSNR = 29.93, SSIM = 0.6225\n",
      "Image overpass80.png: PSNR = 30.21, SSIM = 0.6080\n",
      "Image overpass85.png: PSNR = 30.06, SSIM = 0.6003\n",
      "Image overpass90.png: PSNR = 29.05, SSIM = 0.4735\n",
      "Image overpass91.png: PSNR = 29.74, SSIM = 0.5975\n",
      "Image overpass93.png: PSNR = 31.22, SSIM = 0.7589\n",
      "Image overpass95.png: PSNR = 30.98, SSIM = 0.7427\n",
      "Image parkinglot15.png: PSNR = 29.52, SSIM = 0.6708\n",
      "Image parkinglot18.png: PSNR = 30.83, SSIM = 0.7733\n",
      "Image parkinglot24.png: PSNR = 29.58, SSIM = 0.6461\n",
      "Image parkinglot40.png: PSNR = 29.96, SSIM = 0.6629\n",
      "Image parkinglot46.png: PSNR = 29.67, SSIM = 0.6140\n",
      "Image parkinglot52.png: PSNR = 30.46, SSIM = 0.6793\n",
      "Image parkinglot54.png: PSNR = 29.93, SSIM = 0.6715\n",
      "Image parkinglot61.png: PSNR = 30.06, SSIM = 0.6387\n",
      "Image parkinglot63.png: PSNR = 29.92, SSIM = 0.6752\n",
      "Image parkinglot64.png: PSNR = 30.20, SSIM = 0.6608\n",
      "Image parkinglot70.png: PSNR = 29.53, SSIM = 0.6171\n",
      "Image parkinglot71.png: PSNR = 29.34, SSIM = 0.6015\n",
      "Image parkinglot76.png: PSNR = 29.58, SSIM = 0.5628\n",
      "Image parkinglot82.png: PSNR = 30.31, SSIM = 0.7386\n",
      "Image parkinglot83.png: PSNR = 29.78, SSIM = 0.6988\n",
      "Image parkinglot93.png: PSNR = 29.89, SSIM = 0.5547\n",
      "Image parkinglot95.png: PSNR = 29.98, SSIM = 0.5654\n",
      "Image parkinglot96.png: PSNR = 29.71, SSIM = 0.5286\n",
      "Image parkinglot97.png: PSNR = 29.86, SSIM = 0.6967\n",
      "Image parkinglot99.png: PSNR = 30.49, SSIM = 0.7284\n",
      "Image river04.png: PSNR = 28.91, SSIM = 0.4074\n",
      "Image river11.png: PSNR = 29.30, SSIM = 0.4460\n",
      "Image river13.png: PSNR = 29.47, SSIM = 0.5114\n",
      "Image river16.png: PSNR = 30.16, SSIM = 0.5895\n",
      "Image river17.png: PSNR = 30.33, SSIM = 0.5851\n",
      "Image river23.png: PSNR = 29.54, SSIM = 0.4646\n",
      "Image river31.png: PSNR = 29.75, SSIM = 0.4849\n",
      "Image river33.png: PSNR = 29.04, SSIM = 0.4033\n",
      "Image river36.png: PSNR = 29.77, SSIM = 0.5665\n",
      "Image river45.png: PSNR = 29.52, SSIM = 0.5031\n",
      "Image river51.png: PSNR = 31.53, SSIM = 0.7329\n",
      "Image river66.png: PSNR = 28.66, SSIM = 0.3723\n",
      "Image river76.png: PSNR = 34.55, SSIM = 0.8272\n",
      "Image river80.png: PSNR = 31.13, SSIM = 0.6815\n",
      "Image river86.png: PSNR = 30.89, SSIM = 0.6263\n",
      "Image river89.png: PSNR = 31.22, SSIM = 0.6296\n",
      "Image river92.png: PSNR = 31.78, SSIM = 0.6794\n",
      "Image river93.png: PSNR = 30.39, SSIM = 0.5561\n",
      "Image river94.png: PSNR = 29.46, SSIM = 0.4544\n",
      "Image river99.png: PSNR = 33.98, SSIM = 0.8319\n",
      "Image runway04.png: PSNR = 31.78, SSIM = 0.7345\n",
      "Image runway07.png: PSNR = 31.23, SSIM = 0.6544\n",
      "Image runway08.png: PSNR = 30.81, SSIM = 0.6163\n",
      "Image runway11.png: PSNR = 31.34, SSIM = 0.6688\n",
      "Image runway12.png: PSNR = 31.18, SSIM = 0.6389\n",
      "Image runway16.png: PSNR = 31.71, SSIM = 0.7136\n",
      "Image runway31.png: PSNR = 33.16, SSIM = 0.8097\n",
      "Image runway39.png: PSNR = 31.32, SSIM = 0.6537\n",
      "Image runway41.png: PSNR = 31.70, SSIM = 0.7411\n",
      "Image runway42.png: PSNR = 31.65, SSIM = 0.7140\n",
      "Image runway43.png: PSNR = 32.20, SSIM = 0.7667\n",
      "Image runway56.png: PSNR = 31.50, SSIM = 0.7015\n",
      "Image runway66.png: PSNR = 31.51, SSIM = 0.6935\n",
      "Image runway67.png: PSNR = 30.38, SSIM = 0.5876\n",
      "Image runway72.png: PSNR = 34.42, SSIM = 0.8612\n",
      "Image runway74.png: PSNR = 33.75, SSIM = 0.8503\n",
      "Image runway76.png: PSNR = 34.26, SSIM = 0.8543\n",
      "Image runway82.png: PSNR = 32.46, SSIM = 0.7802\n",
      "Image runway83.png: PSNR = 32.19, SSIM = 0.7831\n",
      "Image runway95.png: PSNR = 33.34, SSIM = 0.7891\n",
      "Image sparseresidential00.png: PSNR = 29.93, SSIM = 0.5937\n",
      "Image sparseresidential01.png: PSNR = 30.25, SSIM = 0.6012\n",
      "Image sparseresidential04.png: PSNR = 29.67, SSIM = 0.5230\n",
      "Image sparseresidential07.png: PSNR = 28.86, SSIM = 0.4190\n",
      "Image sparseresidential09.png: PSNR = 28.76, SSIM = 0.3992\n",
      "Image sparseresidential11.png: PSNR = 29.08, SSIM = 0.5166\n",
      "Image sparseresidential23.png: PSNR = 29.53, SSIM = 0.5059\n",
      "Image sparseresidential28.png: PSNR = 29.97, SSIM = 0.5656\n",
      "Image sparseresidential33.png: PSNR = 29.85, SSIM = 0.5348\n",
      "Image sparseresidential41.png: PSNR = 29.81, SSIM = 0.5767\n",
      "Image sparseresidential45.png: PSNR = 35.34, SSIM = 0.8706\n",
      "Image sparseresidential64.png: PSNR = 29.63, SSIM = 0.5927\n",
      "Image sparseresidential67.png: PSNR = 29.57, SSIM = 0.5969\n",
      "Image sparseresidential70.png: PSNR = 30.11, SSIM = 0.6442\n",
      "Image sparseresidential71.png: PSNR = 29.28, SSIM = 0.5362\n",
      "Image sparseresidential72.png: PSNR = 29.90, SSIM = 0.6404\n",
      "Image sparseresidential81.png: PSNR = 31.28, SSIM = 0.7760\n",
      "Image sparseresidential82.png: PSNR = 31.72, SSIM = 0.7538\n",
      "Image sparseresidential92.png: PSNR = 30.30, SSIM = 0.6649\n",
      "Image sparseresidential95.png: PSNR = 30.32, SSIM = 0.7232\n",
      "Image storagetanks01.png: PSNR = 32.96, SSIM = 0.8213\n",
      "Image storagetanks02.png: PSNR = 32.73, SSIM = 0.7874\n",
      "Image storagetanks16.png: PSNR = 31.16, SSIM = 0.7741\n",
      "Image storagetanks24.png: PSNR = 31.33, SSIM = 0.6906\n",
      "Image storagetanks27.png: PSNR = 29.01, SSIM = 0.4802\n",
      "Image storagetanks29.png: PSNR = 28.84, SSIM = 0.3600\n",
      "Image storagetanks33.png: PSNR = 29.54, SSIM = 0.4787\n",
      "Image storagetanks36.png: PSNR = 29.52, SSIM = 0.5429\n",
      "Image storagetanks37.png: PSNR = 29.41, SSIM = 0.4758\n",
      "Image storagetanks41.png: PSNR = 28.92, SSIM = 0.4516\n",
      "Image storagetanks42.png: PSNR = 29.63, SSIM = 0.6402\n",
      "Image storagetanks43.png: PSNR = 29.66, SSIM = 0.5656\n",
      "Image storagetanks57.png: PSNR = 32.65, SSIM = 0.7474\n",
      "Image storagetanks67.png: PSNR = 35.00, SSIM = 0.8927\n",
      "Image storagetanks68.png: PSNR = 32.27, SSIM = 0.8331\n",
      "Image storagetanks69.png: PSNR = 32.98, SSIM = 0.8446\n",
      "Image storagetanks70.png: PSNR = 33.01, SSIM = 0.8479\n",
      "Image storagetanks87.png: PSNR = 36.00, SSIM = 0.8798\n",
      "Image storagetanks90.png: PSNR = 31.30, SSIM = 0.7236\n",
      "Image storagetanks91.png: PSNR = 30.79, SSIM = 0.7263\n",
      "Image tenniscourt05.png: PSNR = 30.44, SSIM = 0.6665\n",
      "Image tenniscourt13.png: PSNR = 30.01, SSIM = 0.5833\n",
      "Image tenniscourt18.png: PSNR = 32.18, SSIM = 0.8027\n",
      "Image tenniscourt19.png: PSNR = 31.78, SSIM = 0.7780\n",
      "Image tenniscourt23.png: PSNR = 33.67, SSIM = 0.8417\n",
      "Image tenniscourt24.png: PSNR = 31.75, SSIM = 0.7651\n",
      "Image tenniscourt25.png: PSNR = 30.96, SSIM = 0.7093\n",
      "Image tenniscourt26.png: PSNR = 30.76, SSIM = 0.7157\n",
      "Image tenniscourt27.png: PSNR = 30.96, SSIM = 0.7315\n",
      "Image tenniscourt37.png: PSNR = 30.35, SSIM = 0.5715\n",
      "Image tenniscourt38.png: PSNR = 30.23, SSIM = 0.5767\n",
      "Image tenniscourt44.png: PSNR = 30.40, SSIM = 0.5810\n",
      "Image tenniscourt52.png: PSNR = 32.17, SSIM = 0.7939\n",
      "Image tenniscourt60.png: PSNR = 32.94, SSIM = 0.8051\n",
      "Image tenniscourt63.png: PSNR = 32.33, SSIM = 0.7891\n",
      "Image tenniscourt81.png: PSNR = 34.71, SSIM = 0.8328\n",
      "Image tenniscourt85.png: PSNR = 32.19, SSIM = 0.7077\n",
      "Image tenniscourt88.png: PSNR = 31.93, SSIM = 0.7254\n",
      "Image tenniscourt93.png: PSNR = 32.26, SSIM = 0.7878\n",
      "Image tenniscourt95.png: PSNR = 32.78, SSIM = 0.8397\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "\n",
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "fd314267",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ESRGAN\n",
      "Average PSNR: 30.98\n",
      "Average SSIM: 0.6682\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"ESRGAN\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "39f6c34a",
   "metadata": {},
   "source": [
    "# PSNR性能测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "69558cf9",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/RRDB_PSNR_x4.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "# RRDB_PSNR_x4.pth\n",
    "\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/RRDB_PSNR_x4.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "d724722f",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.37, SSIM = 0.0915\n",
      "Image agricultural12.png: PSNR = 30.72, SSIM = 0.8166\n",
      "Image agricultural27.png: PSNR = 28.79, SSIM = 0.2516\n",
      "Image agricultural28.png: PSNR = 28.83, SSIM = 0.2392\n",
      "Image agricultural33.png: PSNR = 31.00, SSIM = 0.5036\n",
      "Image agricultural39.png: PSNR = 33.41, SSIM = 0.8381\n",
      "Image agricultural54.png: PSNR = 32.36, SSIM = 0.7032\n",
      "Image agricultural55.png: PSNR = 37.49, SSIM = 0.8681\n",
      "Image agricultural60.png: PSNR = 31.38, SSIM = 0.7847\n",
      "Image agricultural61.png: PSNR = 31.45, SSIM = 0.9024\n",
      "Image agricultural62.png: PSNR = 28.69, SSIM = 0.2026\n",
      "Image agricultural63.png: PSNR = 30.30, SSIM = 0.4215\n",
      "Image agricultural67.png: PSNR = 27.85, SSIM = 0.0932\n",
      "Image agricultural69.png: PSNR = 27.72, SSIM = 0.0868\n",
      "Image agricultural72.png: PSNR = 27.86, SSIM = 0.0974\n",
      "Image agricultural74.png: PSNR = 29.28, SSIM = 0.4490\n",
      "Image agricultural76.png: PSNR = 30.18, SSIM = 0.7043\n",
      "Image agricultural83.png: PSNR = 28.28, SSIM = 0.1822\n",
      "Image agricultural84.png: PSNR = 28.11, SSIM = 0.1229\n",
      "Image agricultural85.png: PSNR = 28.05, SSIM = 0.1056\n",
      "Image airplane04.png: PSNR = 34.23, SSIM = 0.8991\n",
      "Image airplane09.png: PSNR = 33.80, SSIM = 0.8936\n",
      "Image airplane17.png: PSNR = 32.33, SSIM = 0.8296\n",
      "Image airplane25.png: PSNR = 34.49, SSIM = 0.8670\n",
      "Image airplane28.png: PSNR = 31.93, SSIM = 0.7322\n",
      "Image airplane29.png: PSNR = 31.95, SSIM = 0.7595\n",
      "Image airplane30.png: PSNR = 31.93, SSIM = 0.7805\n",
      "Image airplane32.png: PSNR = 33.01, SSIM = 0.7853\n",
      "Image airplane40.png: PSNR = 33.20, SSIM = 0.8311\n",
      "Image airplane48.png: PSNR = 31.13, SSIM = 0.8125\n",
      "Image airplane55.png: PSNR = 32.05, SSIM = 0.8198\n",
      "Image airplane65.png: PSNR = 31.27, SSIM = 0.7900\n",
      "Image airplane71.png: PSNR = 31.73, SSIM = 0.8011\n",
      "Image airplane74.png: PSNR = 33.71, SSIM = 0.8745\n",
      "Image airplane75.png: PSNR = 34.01, SSIM = 0.8830\n",
      "Image airplane80.png: PSNR = 36.89, SSIM = 0.9297\n",
      "Image airplane81.png: PSNR = 33.59, SSIM = 0.8450\n",
      "Image airplane85.png: PSNR = 34.15, SSIM = 0.8689\n",
      "Image airplane86.png: PSNR = 32.84, SSIM = 0.7779\n",
      "Image airplane87.png: PSNR = 31.43, SSIM = 0.7877\n",
      "Image baseballdiamond03.png: PSNR = 34.90, SSIM = 0.8422\n",
      "Image baseballdiamond04.png: PSNR = 33.58, SSIM = 0.8061\n",
      "Image baseballdiamond05.png: PSNR = 32.86, SSIM = 0.7887\n",
      "Image baseballdiamond13.png: PSNR = 32.23, SSIM = 0.7692\n",
      "Image baseballdiamond16.png: PSNR = 31.36, SSIM = 0.6623\n",
      "Image baseballdiamond24.png: PSNR = 32.91, SSIM = 0.7342\n",
      "Image baseballdiamond31.png: PSNR = 33.91, SSIM = 0.8670\n",
      "Image baseballdiamond32.png: PSNR = 38.01, SSIM = 0.9309\n",
      "Image baseballdiamond37.png: PSNR = 33.89, SSIM = 0.8618\n",
      "Image baseballdiamond40.png: PSNR = 33.59, SSIM = 0.8518\n",
      "Image baseballdiamond47.png: PSNR = 32.47, SSIM = 0.8063\n",
      "Image baseballdiamond50.png: PSNR = 33.16, SSIM = 0.8371\n",
      "Image baseballdiamond53.png: PSNR = 38.56, SSIM = 0.9385\n",
      "Image baseballdiamond58.png: PSNR = 35.11, SSIM = 0.9023\n",
      "Image baseballdiamond72.png: PSNR = 37.55, SSIM = 0.9089\n",
      "Image baseballdiamond74.png: PSNR = 37.62, SSIM = 0.9223\n",
      "Image baseballdiamond79.png: PSNR = 30.67, SSIM = 0.5983\n",
      "Image baseballdiamond81.png: PSNR = 34.14, SSIM = 0.8366\n",
      "Image baseballdiamond83.png: PSNR = 36.03, SSIM = 0.8508\n",
      "Image baseballdiamond96.png: PSNR = 35.07, SSIM = 0.9027\n",
      "Image beach02.png: PSNR = 32.12, SSIM = 0.7435\n",
      "Image beach11.png: PSNR = 38.62, SSIM = 0.9252\n",
      "Image beach13.png: PSNR = 40.92, SSIM = 0.9514\n",
      "Image beach16.png: PSNR = 44.98, SSIM = 0.9758\n",
      "Image beach19.png: PSNR = 37.08, SSIM = 0.9157\n",
      "Image beach26.png: PSNR = 39.83, SSIM = 0.9395\n",
      "Image beach46.png: PSNR = 34.21, SSIM = 0.8213\n",
      "Image beach50.png: PSNR = 36.87, SSIM = 0.9107\n",
      "Image beach54.png: PSNR = 37.55, SSIM = 0.9133\n",
      "Image beach60.png: PSNR = 34.72, SSIM = 0.8562\n",
      "Image beach72.png: PSNR = 34.95, SSIM = 0.8465\n",
      "Image beach73.png: PSNR = 32.31, SSIM = 0.7056\n",
      "Image beach76.png: PSNR = 39.57, SSIM = 0.9443\n",
      "Image beach85.png: PSNR = 39.06, SSIM = 0.9304\n",
      "Image beach86.png: PSNR = 39.60, SSIM = 0.9291\n",
      "Image beach88.png: PSNR = 39.40, SSIM = 0.9400\n",
      "Image beach89.png: PSNR = 40.86, SSIM = 0.9510\n",
      "Image beach94.png: PSNR = 33.91, SSIM = 0.8396\n",
      "Image beach97.png: PSNR = 33.93, SSIM = 0.8467\n",
      "Image beach99.png: PSNR = 33.98, SSIM = 0.8376\n",
      "Image buildings27.png: PSNR = 32.12, SSIM = 0.7706\n",
      "Image buildings32.png: PSNR = 31.65, SSIM = 0.8107\n",
      "Image buildings34.png: PSNR = 35.32, SSIM = 0.9140\n",
      "Image buildings35.png: PSNR = 32.89, SSIM = 0.8457\n",
      "Image buildings36.png: PSNR = 31.03, SSIM = 0.7895\n",
      "Image buildings44.png: PSNR = 30.74, SSIM = 0.7785\n",
      "Image buildings45.png: PSNR = 32.17, SSIM = 0.8449\n",
      "Image buildings46.png: PSNR = 31.00, SSIM = 0.7721\n",
      "Image buildings51.png: PSNR = 32.08, SSIM = 0.8435\n",
      "Image buildings52.png: PSNR = 38.65, SSIM = 0.9614\n",
      "Image buildings56.png: PSNR = 31.47, SSIM = 0.7861\n",
      "Image buildings63.png: PSNR = 32.31, SSIM = 0.8446\n",
      "Image buildings64.png: PSNR = 33.48, SSIM = 0.9023\n",
      "Image buildings65.png: PSNR = 35.88, SSIM = 0.9113\n",
      "Image buildings69.png: PSNR = 34.78, SSIM = 0.9209\n",
      "Image buildings73.png: PSNR = 33.52, SSIM = 0.8955\n",
      "Image buildings74.png: PSNR = 32.92, SSIM = 0.8616\n",
      "Image buildings79.png: PSNR = 30.01, SSIM = 0.6488\n",
      "Image buildings89.png: PSNR = 32.07, SSIM = 0.8367\n",
      "Image buildings93.png: PSNR = 31.56, SSIM = 0.7923\n",
      "Image chaparral09.png: PSNR = 30.43, SSIM = 0.7773\n",
      "Image chaparral15.png: PSNR = 31.42, SSIM = 0.8427\n",
      "Image chaparral17.png: PSNR = 32.98, SSIM = 0.8269\n",
      "Image chaparral23.png: PSNR = 30.35, SSIM = 0.7989\n",
      "Image chaparral26.png: PSNR = 30.28, SSIM = 0.7439\n",
      "Image chaparral33.png: PSNR = 31.43, SSIM = 0.8483\n",
      "Image chaparral37.png: PSNR = 30.96, SSIM = 0.8249\n",
      "Image chaparral42.png: PSNR = 29.40, SSIM = 0.5578\n",
      "Image chaparral43.png: PSNR = 30.89, SSIM = 0.7601\n",
      "Image chaparral50.png: PSNR = 30.19, SSIM = 0.7404\n",
      "Image chaparral55.png: PSNR = 30.29, SSIM = 0.8006\n",
      "Image chaparral61.png: PSNR = 28.26, SSIM = 0.2491\n",
      "Image chaparral63.png: PSNR = 28.23, SSIM = 0.2125\n",
      "Image chaparral64.png: PSNR = 28.16, SSIM = 0.2407\n",
      "Image chaparral68.png: PSNR = 30.94, SSIM = 0.8287\n",
      "Image chaparral71.png: PSNR = 30.42, SSIM = 0.7709\n",
      "Image chaparral80.png: PSNR = 30.02, SSIM = 0.6941\n",
      "Image chaparral83.png: PSNR = 29.74, SSIM = 0.6966\n",
      "Image chaparral88.png: PSNR = 31.68, SSIM = 0.8168\n",
      "Image chaparral99.png: PSNR = 29.76, SSIM = 0.7530\n",
      "Image denseresidential02.png: PSNR = 31.78, SSIM = 0.8731\n",
      "Image denseresidential12.png: PSNR = 31.91, SSIM = 0.8887\n",
      "Image denseresidential14.png: PSNR = 30.86, SSIM = 0.8086\n",
      "Image denseresidential15.png: PSNR = 30.72, SSIM = 0.8199\n",
      "Image denseresidential29.png: PSNR = 30.83, SSIM = 0.7856\n",
      "Image denseresidential31.png: PSNR = 31.43, SSIM = 0.8400\n",
      "Image denseresidential34.png: PSNR = 31.71, SSIM = 0.7711\n",
      "Image denseresidential38.png: PSNR = 30.83, SSIM = 0.7491\n",
      "Image denseresidential46.png: PSNR = 31.41, SSIM = 0.8201\n",
      "Image denseresidential53.png: PSNR = 31.17, SSIM = 0.7750\n",
      "Image denseresidential60.png: PSNR = 31.41, SSIM = 0.8378\n",
      "Image denseresidential64.png: PSNR = 31.50, SSIM = 0.8469\n",
      "Image denseresidential65.png: PSNR = 31.04, SSIM = 0.7921\n",
      "Image denseresidential68.png: PSNR = 31.10, SSIM = 0.7996\n",
      "Image denseresidential75.png: PSNR = 31.74, SSIM = 0.8281\n",
      "Image denseresidential88.png: PSNR = 32.12, SSIM = 0.7977\n",
      "Image denseresidential89.png: PSNR = 31.71, SSIM = 0.7790\n",
      "Image denseresidential91.png: PSNR = 32.40, SSIM = 0.8312\n",
      "Image denseresidential96.png: PSNR = 30.86, SSIM = 0.7666\n",
      "Image denseresidential97.png: PSNR = 31.03, SSIM = 0.7691\n",
      "Image forest08.png: PSNR = 30.16, SSIM = 0.6014\n",
      "Image forest09.png: PSNR = 29.91, SSIM = 0.5730\n",
      "Image forest10.png: PSNR = 32.64, SSIM = 0.7283\n",
      "Image forest11.png: PSNR = 31.49, SSIM = 0.6723\n",
      "Image forest12.png: PSNR = 31.30, SSIM = 0.6517\n",
      "Image forest19.png: PSNR = 28.99, SSIM = 0.4785\n",
      "Image forest20.png: PSNR = 28.70, SSIM = 0.4662\n",
      "Image forest29.png: PSNR = 30.28, SSIM = 0.6492\n",
      "Image forest34.png: PSNR = 30.53, SSIM = 0.6737\n",
      "Image forest39.png: PSNR = 31.18, SSIM = 0.7246\n",
      "Image forest45.png: PSNR = 31.46, SSIM = 0.7470\n",
      "Image forest53.png: PSNR = 31.26, SSIM = 0.7541\n",
      "Image forest56.png: PSNR = 30.40, SSIM = 0.7178\n",
      "Image forest62.png: PSNR = 31.37, SSIM = 0.8366\n",
      "Image forest69.png: PSNR = 29.93, SSIM = 0.6145\n",
      "Image forest73.png: PSNR = 29.53, SSIM = 0.5624\n",
      "Image forest74.png: PSNR = 30.01, SSIM = 0.5815\n",
      "Image forest80.png: PSNR = 30.95, SSIM = 0.6644\n",
      "Image forest84.png: PSNR = 29.73, SSIM = 0.5606\n",
      "Image forest93.png: PSNR = 29.57, SSIM = 0.5415\n",
      "Image freeway00.png: PSNR = 32.32, SSIM = 0.8821\n",
      "Image freeway03.png: PSNR = 32.44, SSIM = 0.8615\n",
      "Image freeway07.png: PSNR = 32.81, SSIM = 0.9004\n",
      "Image freeway09.png: PSNR = 34.02, SSIM = 0.9090\n",
      "Image freeway12.png: PSNR = 34.07, SSIM = 0.9021\n",
      "Image freeway25.png: PSNR = 31.96, SSIM = 0.7449\n",
      "Image freeway26.png: PSNR = 31.43, SSIM = 0.6917\n",
      "Image freeway44.png: PSNR = 30.89, SSIM = 0.6776\n",
      "Image freeway55.png: PSNR = 33.00, SSIM = 0.8676\n",
      "Image freeway64.png: PSNR = 32.19, SSIM = 0.8378\n",
      "Image freeway67.png: PSNR = 32.97, SSIM = 0.8682\n",
      "Image freeway71.png: PSNR = 33.87, SSIM = 0.8934\n",
      "Image freeway74.png: PSNR = 36.05, SSIM = 0.9181\n",
      "Image freeway75.png: PSNR = 35.48, SSIM = 0.9298\n",
      "Image freeway76.png: PSNR = 31.82, SSIM = 0.8393\n",
      "Image freeway77.png: PSNR = 33.87, SSIM = 0.8958\n",
      "Image freeway78.png: PSNR = 34.74, SSIM = 0.9042\n",
      "Image freeway87.png: PSNR = 29.41, SSIM = 0.5677\n",
      "Image freeway92.png: PSNR = 34.63, SSIM = 0.8818\n",
      "Image freeway93.png: PSNR = 30.76, SSIM = 0.6591\n",
      "Image golfcourse07.png: PSNR = 33.61, SSIM = 0.7973\n",
      "Image golfcourse08.png: PSNR = 32.96, SSIM = 0.7569\n",
      "Image golfcourse14.png: PSNR = 33.94, SSIM = 0.8134\n",
      "Image golfcourse17.png: PSNR = 35.25, SSIM = 0.8506\n",
      "Image golfcourse18.png: PSNR = 33.37, SSIM = 0.7953\n",
      "Image golfcourse19.png: PSNR = 32.01, SSIM = 0.7394\n",
      "Image golfcourse24.png: PSNR = 32.53, SSIM = 0.7861\n",
      "Image golfcourse27.png: PSNR = 32.07, SSIM = 0.6941\n",
      "Image golfcourse33.png: PSNR = 31.92, SSIM = 0.6752\n",
      "Image golfcourse35.png: PSNR = 32.37, SSIM = 0.7170\n",
      "Image golfcourse45.png: PSNR = 36.23, SSIM = 0.8794\n",
      "Image golfcourse50.png: PSNR = 34.10, SSIM = 0.8139\n",
      "Image golfcourse52.png: PSNR = 32.66, SSIM = 0.7622\n",
      "Image golfcourse73.png: PSNR = 37.01, SSIM = 0.9089\n",
      "Image golfcourse76.png: PSNR = 33.66, SSIM = 0.8323\n",
      "Image golfcourse77.png: PSNR = 34.27, SSIM = 0.8511\n",
      "Image golfcourse78.png: PSNR = 34.84, SSIM = 0.8693\n",
      "Image golfcourse81.png: PSNR = 33.13, SSIM = 0.7987\n",
      "Image golfcourse82.png: PSNR = 32.70, SSIM = 0.8064\n",
      "Image golfcourse85.png: PSNR = 32.66, SSIM = 0.7997\n",
      "Image harbor00.png: PSNR = 32.44, SSIM = 0.8712\n",
      "Image harbor05.png: PSNR = 30.89, SSIM = 0.8018\n",
      "Image harbor13.png: PSNR = 30.10, SSIM = 0.7837\n",
      "Image harbor14.png: PSNR = 30.29, SSIM = 0.7832\n",
      "Image harbor15.png: PSNR = 30.42, SSIM = 0.7823\n",
      "Image harbor19.png: PSNR = 31.15, SSIM = 0.8146\n",
      "Image harbor22.png: PSNR = 32.19, SSIM = 0.8965\n",
      "Image harbor24.png: PSNR = 31.34, SSIM = 0.8857\n",
      "Image harbor32.png: PSNR = 33.88, SSIM = 0.8827\n",
      "Image harbor33.png: PSNR = 33.47, SSIM = 0.8726\n",
      "Image harbor35.png: PSNR = 31.83, SSIM = 0.8305\n",
      "Image harbor49.png: PSNR = 31.37, SSIM = 0.8488\n",
      "Image harbor61.png: PSNR = 30.43, SSIM = 0.7894\n",
      "Image harbor65.png: PSNR = 30.64, SSIM = 0.7685\n",
      "Image harbor67.png: PSNR = 31.57, SSIM = 0.8764\n",
      "Image harbor68.png: PSNR = 32.35, SSIM = 0.9008\n",
      "Image harbor75.png: PSNR = 32.26, SSIM = 0.8521\n",
      "Image harbor81.png: PSNR = 32.85, SSIM = 0.8943\n",
      "Image harbor83.png: PSNR = 30.46, SSIM = 0.7979\n",
      "Image harbor88.png: PSNR = 31.13, SSIM = 0.8172\n",
      "Image intersection00.png: PSNR = 32.61, SSIM = 0.8723\n",
      "Image intersection10.png: PSNR = 32.05, SSIM = 0.8448\n",
      "Image intersection16.png: PSNR = 33.23, SSIM = 0.8056\n",
      "Image intersection19.png: PSNR = 31.80, SSIM = 0.8016\n",
      "Image intersection26.png: PSNR = 32.58, SSIM = 0.7796\n",
      "Image intersection28.png: PSNR = 31.78, SSIM = 0.7821\n",
      "Image intersection29.png: PSNR = 31.68, SSIM = 0.7615\n",
      "Image intersection30.png: PSNR = 31.21, SSIM = 0.7521\n",
      "Image intersection32.png: PSNR = 31.37, SSIM = 0.7615\n",
      "Image intersection40.png: PSNR = 31.38, SSIM = 0.7828\n",
      "Image intersection43.png: PSNR = 30.99, SSIM = 0.7724\n",
      "Image intersection44.png: PSNR = 32.42, SSIM = 0.8150\n",
      "Image intersection50.png: PSNR = 32.56, SSIM = 0.7895\n",
      "Image intersection52.png: PSNR = 32.26, SSIM = 0.7823\n",
      "Image intersection70.png: PSNR = 32.87, SSIM = 0.8724\n",
      "Image intersection76.png: PSNR = 35.66, SSIM = 0.9221\n",
      "Image intersection77.png: PSNR = 34.69, SSIM = 0.9022\n",
      "Image intersection87.png: PSNR = 32.50, SSIM = 0.7853\n",
      "Image intersection89.png: PSNR = 31.82, SSIM = 0.7499\n",
      "Image intersection99.png: PSNR = 31.84, SSIM = 0.7756\n",
      "Image mediumresidential15.png: PSNR = 30.43, SSIM = 0.6937\n",
      "Image mediumresidential19.png: PSNR = 31.63, SSIM = 0.7525\n",
      "Image mediumresidential34.png: PSNR = 31.32, SSIM = 0.8157\n",
      "Image mediumresidential40.png: PSNR = 31.03, SSIM = 0.7567\n",
      "Image mediumresidential44.png: PSNR = 30.95, SSIM = 0.7493\n",
      "Image mediumresidential49.png: PSNR = 31.03, SSIM = 0.7527\n",
      "Image mediumresidential52.png: PSNR = 31.51, SSIM = 0.7744\n",
      "Image mediumresidential53.png: PSNR = 31.19, SSIM = 0.7738\n",
      "Image mediumresidential73.png: PSNR = 29.44, SSIM = 0.6260\n",
      "Image mediumresidential76.png: PSNR = 34.50, SSIM = 0.9135\n",
      "Image mediumresidential77.png: PSNR = 35.15, SSIM = 0.9108\n",
      "Image mediumresidential78.png: PSNR = 35.53, SSIM = 0.9211\n",
      "Image mediumresidential79.png: PSNR = 35.62, SSIM = 0.9186\n",
      "Image mediumresidential80.png: PSNR = 35.11, SSIM = 0.9015\n",
      "Image mediumresidential81.png: PSNR = 30.21, SSIM = 0.7365\n",
      "Image mediumresidential83.png: PSNR = 30.79, SSIM = 0.7876\n",
      "Image mediumresidential86.png: PSNR = 30.79, SSIM = 0.7332\n",
      "Image mediumresidential89.png: PSNR = 34.12, SSIM = 0.8727\n",
      "Image mediumresidential93.png: PSNR = 32.96, SSIM = 0.8340\n",
      "Image mediumresidential97.png: PSNR = 31.29, SSIM = 0.7922\n",
      "Image mobilehomepark03.png: PSNR = 30.44, SSIM = 0.7331\n",
      "Image mobilehomepark04.png: PSNR = 31.04, SSIM = 0.7452\n",
      "Image mobilehomepark05.png: PSNR = 30.82, SSIM = 0.7793\n",
      "Image mobilehomepark16.png: PSNR = 30.97, SSIM = 0.7825\n",
      "Image mobilehomepark29.png: PSNR = 32.33, SSIM = 0.8702\n",
      "Image mobilehomepark48.png: PSNR = 31.68, SSIM = 0.8529\n",
      "Image mobilehomepark49.png: PSNR = 32.36, SSIM = 0.8805\n",
      "Image mobilehomepark50.png: PSNR = 31.94, SSIM = 0.8605\n",
      "Image mobilehomepark54.png: PSNR = 33.03, SSIM = 0.8918\n",
      "Image mobilehomepark57.png: PSNR = 32.59, SSIM = 0.8750\n",
      "Image mobilehomepark59.png: PSNR = 31.81, SSIM = 0.8556\n",
      "Image mobilehomepark61.png: PSNR = 33.04, SSIM = 0.9026\n",
      "Image mobilehomepark63.png: PSNR = 32.68, SSIM = 0.8880\n",
      "Image mobilehomepark64.png: PSNR = 32.45, SSIM = 0.8875\n",
      "Image mobilehomepark77.png: PSNR = 30.20, SSIM = 0.7028\n",
      "Image mobilehomepark80.png: PSNR = 29.36, SSIM = 0.6684\n",
      "Image mobilehomepark83.png: PSNR = 29.08, SSIM = 0.6140\n",
      "Image mobilehomepark84.png: PSNR = 28.83, SSIM = 0.5504\n",
      "Image mobilehomepark93.png: PSNR = 29.30, SSIM = 0.6626\n",
      "Image mobilehomepark95.png: PSNR = 28.86, SSIM = 0.5618\n",
      "Image overpass00.png: PSNR = 32.38, SSIM = 0.8490\n",
      "Image overpass09.png: PSNR = 31.74, SSIM = 0.8472\n",
      "Image overpass18.png: PSNR = 34.50, SSIM = 0.8891\n",
      "Image overpass19.png: PSNR = 33.31, SSIM = 0.8601\n",
      "Image overpass27.png: PSNR = 30.09, SSIM = 0.6209\n",
      "Image overpass40.png: PSNR = 31.30, SSIM = 0.7388\n",
      "Image overpass54.png: PSNR = 30.49, SSIM = 0.6996\n",
      "Image overpass56.png: PSNR = 33.41, SSIM = 0.8588\n",
      "Image overpass58.png: PSNR = 32.06, SSIM = 0.7996\n",
      "Image overpass63.png: PSNR = 31.44, SSIM = 0.7857\n",
      "Image overpass66.png: PSNR = 32.67, SSIM = 0.7836\n",
      "Image overpass72.png: PSNR = 30.44, SSIM = 0.6544\n",
      "Image overpass73.png: PSNR = 30.96, SSIM = 0.7121\n",
      "Image overpass76.png: PSNR = 31.45, SSIM = 0.7799\n",
      "Image overpass80.png: PSNR = 31.35, SSIM = 0.7119\n",
      "Image overpass85.png: PSNR = 30.60, SSIM = 0.6624\n",
      "Image overpass90.png: PSNR = 29.93, SSIM = 0.6345\n",
      "Image overpass91.png: PSNR = 30.94, SSIM = 0.7303\n",
      "Image overpass93.png: PSNR = 32.35, SSIM = 0.8259\n",
      "Image overpass95.png: PSNR = 32.21, SSIM = 0.8232\n",
      "Image parkinglot15.png: PSNR = 31.11, SSIM = 0.8490\n",
      "Image parkinglot18.png: PSNR = 31.91, SSIM = 0.8452\n",
      "Image parkinglot24.png: PSNR = 30.26, SSIM = 0.7371\n",
      "Image parkinglot40.png: PSNR = 30.55, SSIM = 0.7299\n",
      "Image parkinglot46.png: PSNR = 30.23, SSIM = 0.6969\n",
      "Image parkinglot52.png: PSNR = 31.21, SSIM = 0.7573\n",
      "Image parkinglot54.png: PSNR = 30.74, SSIM = 0.7601\n",
      "Image parkinglot61.png: PSNR = 30.88, SSIM = 0.7246\n",
      "Image parkinglot63.png: PSNR = 30.73, SSIM = 0.7732\n",
      "Image parkinglot64.png: PSNR = 30.79, SSIM = 0.7299\n",
      "Image parkinglot70.png: PSNR = 30.31, SSIM = 0.7381\n",
      "Image parkinglot71.png: PSNR = 30.48, SSIM = 0.7893\n",
      "Image parkinglot76.png: PSNR = 31.03, SSIM = 0.7820\n",
      "Image parkinglot82.png: PSNR = 31.63, SSIM = 0.8571\n",
      "Image parkinglot83.png: PSNR = 31.00, SSIM = 0.8315\n",
      "Image parkinglot93.png: PSNR = 30.40, SSIM = 0.6882\n",
      "Image parkinglot95.png: PSNR = 30.64, SSIM = 0.6753\n",
      "Image parkinglot96.png: PSNR = 30.43, SSIM = 0.6572\n",
      "Image parkinglot97.png: PSNR = 30.89, SSIM = 0.8308\n",
      "Image parkinglot99.png: PSNR = 31.71, SSIM = 0.8363\n",
      "Image river04.png: PSNR = 29.72, SSIM = 0.5664\n",
      "Image river11.png: PSNR = 29.93, SSIM = 0.5821\n",
      "Image river13.png: PSNR = 30.07, SSIM = 0.6355\n",
      "Image river16.png: PSNR = 30.71, SSIM = 0.6755\n",
      "Image river17.png: PSNR = 31.22, SSIM = 0.7024\n",
      "Image river23.png: PSNR = 30.41, SSIM = 0.6064\n",
      "Image river31.png: PSNR = 30.29, SSIM = 0.5576\n",
      "Image river33.png: PSNR = 29.51, SSIM = 0.4981\n",
      "Image river36.png: PSNR = 31.26, SSIM = 0.7534\n",
      "Image river45.png: PSNR = 30.97, SSIM = 0.7191\n",
      "Image river51.png: PSNR = 32.67, SSIM = 0.8175\n",
      "Image river66.png: PSNR = 29.20, SSIM = 0.5134\n",
      "Image river76.png: PSNR = 36.52, SSIM = 0.8911\n",
      "Image river80.png: PSNR = 32.32, SSIM = 0.7756\n",
      "Image river86.png: PSNR = 32.22, SSIM = 0.7665\n",
      "Image river89.png: PSNR = 32.63, SSIM = 0.7561\n",
      "Image river92.png: PSNR = 32.99, SSIM = 0.7840\n",
      "Image river93.png: PSNR = 31.71, SSIM = 0.7033\n",
      "Image river94.png: PSNR = 30.36, SSIM = 0.5860\n",
      "Image river99.png: PSNR = 35.21, SSIM = 0.8854\n",
      "Image runway04.png: PSNR = 33.84, SSIM = 0.8402\n",
      "Image runway07.png: PSNR = 33.36, SSIM = 0.7974\n",
      "Image runway08.png: PSNR = 33.06, SSIM = 0.7825\n",
      "Image runway11.png: PSNR = 33.60, SSIM = 0.8110\n",
      "Image runway12.png: PSNR = 33.58, SSIM = 0.7979\n",
      "Image runway16.png: PSNR = 34.13, SSIM = 0.8377\n",
      "Image runway31.png: PSNR = 34.56, SSIM = 0.8759\n",
      "Image runway39.png: PSNR = 34.35, SSIM = 0.8394\n",
      "Image runway41.png: PSNR = 32.74, SSIM = 0.8087\n",
      "Image runway42.png: PSNR = 32.77, SSIM = 0.7923\n",
      "Image runway43.png: PSNR = 33.07, SSIM = 0.8105\n",
      "Image runway56.png: PSNR = 33.33, SSIM = 0.8226\n",
      "Image runway66.png: PSNR = 32.57, SSIM = 0.7585\n",
      "Image runway67.png: PSNR = 31.24, SSIM = 0.6730\n",
      "Image runway72.png: PSNR = 35.64, SSIM = 0.8927\n",
      "Image runway74.png: PSNR = 34.86, SSIM = 0.8857\n",
      "Image runway76.png: PSNR = 35.55, SSIM = 0.8907\n",
      "Image runway82.png: PSNR = 33.56, SSIM = 0.8322\n",
      "Image runway83.png: PSNR = 33.58, SSIM = 0.8446\n",
      "Image runway95.png: PSNR = 35.20, SSIM = 0.8586\n",
      "Image sparseresidential00.png: PSNR = 30.83, SSIM = 0.7002\n",
      "Image sparseresidential01.png: PSNR = 31.22, SSIM = 0.6993\n",
      "Image sparseresidential04.png: PSNR = 30.62, SSIM = 0.6482\n",
      "Image sparseresidential07.png: PSNR = 29.64, SSIM = 0.5746\n",
      "Image sparseresidential09.png: PSNR = 29.52, SSIM = 0.5527\n",
      "Image sparseresidential11.png: PSNR = 29.84, SSIM = 0.6454\n",
      "Image sparseresidential23.png: PSNR = 30.26, SSIM = 0.6079\n",
      "Image sparseresidential28.png: PSNR = 30.88, SSIM = 0.6701\n",
      "Image sparseresidential33.png: PSNR = 30.65, SSIM = 0.6367\n",
      "Image sparseresidential41.png: PSNR = 30.52, SSIM = 0.6625\n",
      "Image sparseresidential45.png: PSNR = 37.94, SSIM = 0.9306\n",
      "Image sparseresidential64.png: PSNR = 30.82, SSIM = 0.7506\n",
      "Image sparseresidential67.png: PSNR = 30.76, SSIM = 0.7536\n",
      "Image sparseresidential70.png: PSNR = 31.54, SSIM = 0.7885\n",
      "Image sparseresidential71.png: PSNR = 30.59, SSIM = 0.7427\n",
      "Image sparseresidential72.png: PSNR = 31.30, SSIM = 0.8003\n",
      "Image sparseresidential81.png: PSNR = 32.95, SSIM = 0.8624\n",
      "Image sparseresidential82.png: PSNR = 33.17, SSIM = 0.8197\n",
      "Image sparseresidential92.png: PSNR = 31.05, SSIM = 0.7384\n",
      "Image sparseresidential95.png: PSNR = 32.17, SSIM = 0.8595\n",
      "Image storagetanks01.png: PSNR = 34.39, SSIM = 0.8833\n",
      "Image storagetanks02.png: PSNR = 34.15, SSIM = 0.8606\n",
      "Image storagetanks16.png: PSNR = 32.53, SSIM = 0.8553\n",
      "Image storagetanks24.png: PSNR = 32.29, SSIM = 0.7643\n",
      "Image storagetanks27.png: PSNR = 30.23, SSIM = 0.6676\n",
      "Image storagetanks29.png: PSNR = 29.99, SSIM = 0.6074\n",
      "Image storagetanks33.png: PSNR = 31.30, SSIM = 0.7185\n",
      "Image storagetanks36.png: PSNR = 30.77, SSIM = 0.6924\n",
      "Image storagetanks37.png: PSNR = 31.09, SSIM = 0.6994\n",
      "Image storagetanks41.png: PSNR = 30.07, SSIM = 0.6551\n",
      "Image storagetanks42.png: PSNR = 30.69, SSIM = 0.7813\n",
      "Image storagetanks43.png: PSNR = 30.80, SSIM = 0.7140\n",
      "Image storagetanks57.png: PSNR = 35.13, SSIM = 0.8585\n",
      "Image storagetanks67.png: PSNR = 36.87, SSIM = 0.9354\n",
      "Image storagetanks68.png: PSNR = 33.66, SSIM = 0.8939\n",
      "Image storagetanks69.png: PSNR = 34.19, SSIM = 0.8919\n",
      "Image storagetanks70.png: PSNR = 34.71, SSIM = 0.9065\n",
      "Image storagetanks87.png: PSNR = 37.62, SSIM = 0.9195\n",
      "Image storagetanks90.png: PSNR = 32.30, SSIM = 0.7948\n",
      "Image storagetanks91.png: PSNR = 31.46, SSIM = 0.7770\n",
      "Image tenniscourt05.png: PSNR = 31.28, SSIM = 0.7355\n",
      "Image tenniscourt13.png: PSNR = 30.82, SSIM = 0.6789\n",
      "Image tenniscourt18.png: PSNR = 33.68, SSIM = 0.8695\n",
      "Image tenniscourt19.png: PSNR = 33.11, SSIM = 0.8540\n",
      "Image tenniscourt23.png: PSNR = 36.32, SSIM = 0.9164\n",
      "Image tenniscourt24.png: PSNR = 33.27, SSIM = 0.8528\n",
      "Image tenniscourt25.png: PSNR = 32.31, SSIM = 0.8180\n",
      "Image tenniscourt26.png: PSNR = 32.24, SSIM = 0.8348\n",
      "Image tenniscourt27.png: PSNR = 32.46, SSIM = 0.8369\n",
      "Image tenniscourt37.png: PSNR = 31.59, SSIM = 0.7175\n",
      "Image tenniscourt38.png: PSNR = 31.42, SSIM = 0.7021\n",
      "Image tenniscourt44.png: PSNR = 31.57, SSIM = 0.7109\n",
      "Image tenniscourt52.png: PSNR = 33.95, SSIM = 0.8754\n",
      "Image tenniscourt60.png: PSNR = 34.76, SSIM = 0.8761\n",
      "Image tenniscourt63.png: PSNR = 33.69, SSIM = 0.8516\n",
      "Image tenniscourt81.png: PSNR = 37.41, SSIM = 0.9068\n",
      "Image tenniscourt85.png: PSNR = 34.48, SSIM = 0.8281\n",
      "Image tenniscourt88.png: PSNR = 33.79, SSIM = 0.8229\n",
      "Image tenniscourt93.png: PSNR = 33.82, SSIM = 0.8673\n",
      "Image tenniscourt95.png: PSNR = 34.41, SSIM = 0.8959\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "ae54edef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PSNR\n",
      "Average PSNR: 32.30\n",
      "Average SSIM: 0.7701\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"PSNR\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "81b3163e",
   "metadata": {},
   "source": [
    "# Interpolating with alpha =  0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "c3f1553c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interpolating with alpha =  0.1\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "import torch\n",
    "from collections import OrderedDict\n",
    "\n",
    "alpha =0.1\n",
    "\n",
    "net_PSNR_path = './models/RRDB_PSNR_x4.pth'\n",
    "net_ESRGAN_path = './models/RRDB_ESRGAN_x4.pth'\n",
    "net_interp_path = './models/interp_{:02d}.pth'.format(int(alpha*10))\n",
    "\n",
    "net_PSNR = torch.load(net_PSNR_path)\n",
    "net_ESRGAN = torch.load(net_ESRGAN_path)\n",
    "net_interp = OrderedDict()\n",
    "\n",
    "print('Interpolating with alpha = ', alpha)\n",
    "for k, v_PSNR in net_PSNR.items():\n",
    "    v_ESRGAN = net_ESRGAN[k]\n",
    "    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN\n",
    "\n",
    "torch.save(net_interp, net_interp_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "6b5fa662",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/interp_01.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "#test.py\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/interp_01.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "6d10c1b7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.35, SSIM = 0.0920\n",
      "Image agricultural12.png: PSNR = 32.17, SSIM = 0.9349\n",
      "Image agricultural27.png: PSNR = 28.78, SSIM = 0.2534\n",
      "Image agricultural28.png: PSNR = 28.81, SSIM = 0.2402\n",
      "Image agricultural33.png: PSNR = 30.99, SSIM = 0.5054\n",
      "Image agricultural39.png: PSNR = 33.51, SSIM = 0.8419\n",
      "Image agricultural54.png: PSNR = 32.29, SSIM = 0.7019\n",
      "Image agricultural55.png: PSNR = 37.35, SSIM = 0.8682\n",
      "Image agricultural60.png: PSNR = 31.19, SSIM = 0.7757\n",
      "Image agricultural61.png: PSNR = 34.21, SSIM = 0.9557\n",
      "Image agricultural62.png: PSNR = 28.67, SSIM = 0.2033\n",
      "Image agricultural63.png: PSNR = 30.25, SSIM = 0.4231\n",
      "Image agricultural67.png: PSNR = 27.85, SSIM = 0.0940\n",
      "Image agricultural69.png: PSNR = 27.73, SSIM = 0.0885\n",
      "Image agricultural72.png: PSNR = 27.87, SSIM = 0.0986\n",
      "Image agricultural74.png: PSNR = 29.22, SSIM = 0.4452\n",
      "Image agricultural76.png: PSNR = 30.38, SSIM = 0.7251\n",
      "Image agricultural83.png: PSNR = 28.25, SSIM = 0.1826\n",
      "Image agricultural84.png: PSNR = 28.12, SSIM = 0.1236\n",
      "Image agricultural85.png: PSNR = 28.05, SSIM = 0.1060\n",
      "Image airplane04.png: PSNR = 34.13, SSIM = 0.8989\n",
      "Image airplane09.png: PSNR = 33.75, SSIM = 0.8934\n",
      "Image airplane17.png: PSNR = 32.34, SSIM = 0.8304\n",
      "Image airplane25.png: PSNR = 34.39, SSIM = 0.8663\n",
      "Image airplane28.png: PSNR = 31.90, SSIM = 0.7335\n",
      "Image airplane29.png: PSNR = 31.89, SSIM = 0.7593\n",
      "Image airplane30.png: PSNR = 31.89, SSIM = 0.7802\n",
      "Image airplane32.png: PSNR = 32.93, SSIM = 0.7857\n",
      "Image airplane40.png: PSNR = 33.14, SSIM = 0.8314\n",
      "Image airplane48.png: PSNR = 31.12, SSIM = 0.8132\n",
      "Image airplane55.png: PSNR = 32.04, SSIM = 0.8209\n",
      "Image airplane65.png: PSNR = 31.24, SSIM = 0.7905\n",
      "Image airplane71.png: PSNR = 31.70, SSIM = 0.8016\n",
      "Image airplane74.png: PSNR = 33.66, SSIM = 0.8752\n",
      "Image airplane75.png: PSNR = 33.94, SSIM = 0.8830\n",
      "Image airplane80.png: PSNR = 36.71, SSIM = 0.9291\n",
      "Image airplane81.png: PSNR = 33.54, SSIM = 0.8458\n",
      "Image airplane85.png: PSNR = 34.04, SSIM = 0.8675\n",
      "Image airplane86.png: PSNR = 32.76, SSIM = 0.7780\n",
      "Image airplane87.png: PSNR = 31.36, SSIM = 0.7880\n",
      "Image baseballdiamond03.png: PSNR = 34.88, SSIM = 0.8432\n",
      "Image baseballdiamond04.png: PSNR = 33.51, SSIM = 0.8067\n",
      "Image baseballdiamond05.png: PSNR = 32.85, SSIM = 0.7898\n",
      "Image baseballdiamond13.png: PSNR = 32.16, SSIM = 0.7697\n",
      "Image baseballdiamond16.png: PSNR = 31.34, SSIM = 0.6646\n",
      "Image baseballdiamond24.png: PSNR = 32.87, SSIM = 0.7348\n",
      "Image baseballdiamond31.png: PSNR = 33.80, SSIM = 0.8663\n",
      "Image baseballdiamond32.png: PSNR = 37.84, SSIM = 0.9309\n",
      "Image baseballdiamond37.png: PSNR = 33.81, SSIM = 0.8617\n",
      "Image baseballdiamond40.png: PSNR = 33.50, SSIM = 0.8521\n",
      "Image baseballdiamond47.png: PSNR = 32.40, SSIM = 0.8065\n",
      "Image baseballdiamond50.png: PSNR = 33.08, SSIM = 0.8374\n",
      "Image baseballdiamond53.png: PSNR = 38.38, SSIM = 0.9384\n",
      "Image baseballdiamond58.png: PSNR = 35.06, SSIM = 0.9023\n",
      "Image baseballdiamond72.png: PSNR = 37.45, SSIM = 0.9091\n",
      "Image baseballdiamond74.png: PSNR = 37.52, SSIM = 0.9226\n",
      "Image baseballdiamond79.png: PSNR = 30.64, SSIM = 0.5994\n",
      "Image baseballdiamond81.png: PSNR = 34.11, SSIM = 0.8370\n",
      "Image baseballdiamond83.png: PSNR = 35.98, SSIM = 0.8512\n",
      "Image baseballdiamond96.png: PSNR = 35.03, SSIM = 0.9027\n",
      "Image beach02.png: PSNR = 32.07, SSIM = 0.7444\n",
      "Image beach11.png: PSNR = 38.48, SSIM = 0.9252\n",
      "Image beach13.png: PSNR = 40.69, SSIM = 0.9513\n",
      "Image beach16.png: PSNR = 44.24, SSIM = 0.9753\n",
      "Image beach19.png: PSNR = 36.94, SSIM = 0.9157\n",
      "Image beach26.png: PSNR = 39.62, SSIM = 0.9396\n",
      "Image beach46.png: PSNR = 34.18, SSIM = 0.8214\n",
      "Image beach50.png: PSNR = 36.79, SSIM = 0.9106\n",
      "Image beach54.png: PSNR = 37.46, SSIM = 0.9134\n",
      "Image beach60.png: PSNR = 34.65, SSIM = 0.8567\n",
      "Image beach72.png: PSNR = 34.85, SSIM = 0.8466\n",
      "Image beach73.png: PSNR = 32.26, SSIM = 0.7056\n",
      "Image beach76.png: PSNR = 39.29, SSIM = 0.9441\n",
      "Image beach85.png: PSNR = 38.69, SSIM = 0.9304\n",
      "Image beach86.png: PSNR = 39.18, SSIM = 0.9289\n",
      "Image beach88.png: PSNR = 38.97, SSIM = 0.9397\n",
      "Image beach89.png: PSNR = 40.29, SSIM = 0.9509\n",
      "Image beach94.png: PSNR = 33.84, SSIM = 0.8402\n",
      "Image beach97.png: PSNR = 33.86, SSIM = 0.8472\n",
      "Image beach99.png: PSNR = 33.94, SSIM = 0.8389\n",
      "Image buildings27.png: PSNR = 32.09, SSIM = 0.7709\n",
      "Image buildings32.png: PSNR = 31.62, SSIM = 0.8113\n",
      "Image buildings34.png: PSNR = 35.33, SSIM = 0.9145\n",
      "Image buildings35.png: PSNR = 32.87, SSIM = 0.8460\n",
      "Image buildings36.png: PSNR = 30.99, SSIM = 0.7889\n",
      "Image buildings44.png: PSNR = 30.71, SSIM = 0.7786\n",
      "Image buildings45.png: PSNR = 32.06, SSIM = 0.8446\n",
      "Image buildings46.png: PSNR = 30.98, SSIM = 0.7732\n",
      "Image buildings51.png: PSNR = 32.03, SSIM = 0.8439\n",
      "Image buildings52.png: PSNR = 38.37, SSIM = 0.9609\n",
      "Image buildings56.png: PSNR = 31.41, SSIM = 0.7858\n",
      "Image buildings63.png: PSNR = 32.26, SSIM = 0.8437\n",
      "Image buildings64.png: PSNR = 33.43, SSIM = 0.9022\n",
      "Image buildings65.png: PSNR = 35.83, SSIM = 0.9125\n",
      "Image buildings69.png: PSNR = 34.64, SSIM = 0.9208\n",
      "Image buildings73.png: PSNR = 33.48, SSIM = 0.8956\n",
      "Image buildings74.png: PSNR = 32.91, SSIM = 0.8622\n",
      "Image buildings79.png: PSNR = 29.98, SSIM = 0.6508\n",
      "Image buildings89.png: PSNR = 32.01, SSIM = 0.8367\n",
      "Image buildings93.png: PSNR = 31.51, SSIM = 0.7926\n",
      "Image chaparral09.png: PSNR = 30.38, SSIM = 0.7782\n",
      "Image chaparral15.png: PSNR = 31.40, SSIM = 0.8438\n",
      "Image chaparral17.png: PSNR = 32.93, SSIM = 0.8275\n",
      "Image chaparral23.png: PSNR = 30.33, SSIM = 0.7996\n",
      "Image chaparral26.png: PSNR = 30.26, SSIM = 0.7452\n",
      "Image chaparral33.png: PSNR = 31.42, SSIM = 0.8490\n",
      "Image chaparral37.png: PSNR = 30.97, SSIM = 0.8267\n",
      "Image chaparral42.png: PSNR = 29.39, SSIM = 0.5588\n",
      "Image chaparral43.png: PSNR = 30.83, SSIM = 0.7612\n",
      "Image chaparral50.png: PSNR = 30.17, SSIM = 0.7412\n",
      "Image chaparral55.png: PSNR = 30.25, SSIM = 0.8018\n",
      "Image chaparral61.png: PSNR = 28.25, SSIM = 0.2516\n",
      "Image chaparral63.png: PSNR = 28.23, SSIM = 0.2172\n",
      "Image chaparral64.png: PSNR = 28.15, SSIM = 0.2465\n",
      "Image chaparral68.png: PSNR = 30.91, SSIM = 0.8291\n",
      "Image chaparral71.png: PSNR = 30.41, SSIM = 0.7719\n",
      "Image chaparral80.png: PSNR = 29.98, SSIM = 0.6942\n",
      "Image chaparral83.png: PSNR = 29.71, SSIM = 0.6974\n",
      "Image chaparral88.png: PSNR = 31.67, SSIM = 0.8174\n",
      "Image chaparral99.png: PSNR = 29.75, SSIM = 0.7534\n",
      "Image denseresidential02.png: PSNR = 31.74, SSIM = 0.8724\n",
      "Image denseresidential12.png: PSNR = 31.87, SSIM = 0.8888\n",
      "Image denseresidential14.png: PSNR = 30.88, SSIM = 0.8112\n",
      "Image denseresidential15.png: PSNR = 30.72, SSIM = 0.8214\n",
      "Image denseresidential29.png: PSNR = 30.80, SSIM = 0.7863\n",
      "Image denseresidential31.png: PSNR = 31.36, SSIM = 0.8400\n",
      "Image denseresidential34.png: PSNR = 31.67, SSIM = 0.7720\n",
      "Image denseresidential38.png: PSNR = 30.80, SSIM = 0.7482\n",
      "Image denseresidential46.png: PSNR = 31.39, SSIM = 0.8205\n",
      "Image denseresidential53.png: PSNR = 31.13, SSIM = 0.7751\n",
      "Image denseresidential60.png: PSNR = 31.41, SSIM = 0.8390\n",
      "Image denseresidential64.png: PSNR = 31.47, SSIM = 0.8469\n",
      "Image denseresidential65.png: PSNR = 30.99, SSIM = 0.7910\n",
      "Image denseresidential68.png: PSNR = 31.05, SSIM = 0.7994\n",
      "Image denseresidential75.png: PSNR = 31.67, SSIM = 0.8272\n",
      "Image denseresidential88.png: PSNR = 32.07, SSIM = 0.7980\n",
      "Image denseresidential89.png: PSNR = 31.69, SSIM = 0.7787\n",
      "Image denseresidential91.png: PSNR = 32.37, SSIM = 0.8313\n",
      "Image denseresidential96.png: PSNR = 30.84, SSIM = 0.7670\n",
      "Image denseresidential97.png: PSNR = 31.01, SSIM = 0.7698\n",
      "Image forest08.png: PSNR = 30.14, SSIM = 0.6035\n",
      "Image forest09.png: PSNR = 29.89, SSIM = 0.5749\n",
      "Image forest10.png: PSNR = 32.63, SSIM = 0.7292\n",
      "Image forest11.png: PSNR = 31.48, SSIM = 0.6731\n",
      "Image forest12.png: PSNR = 31.27, SSIM = 0.6526\n",
      "Image forest19.png: PSNR = 28.98, SSIM = 0.4801\n",
      "Image forest20.png: PSNR = 28.69, SSIM = 0.4680\n",
      "Image forest29.png: PSNR = 30.26, SSIM = 0.6497\n",
      "Image forest34.png: PSNR = 30.52, SSIM = 0.6745\n",
      "Image forest39.png: PSNR = 31.17, SSIM = 0.7262\n",
      "Image forest45.png: PSNR = 31.45, SSIM = 0.7485\n",
      "Image forest53.png: PSNR = 31.25, SSIM = 0.7551\n",
      "Image forest56.png: PSNR = 30.40, SSIM = 0.7194\n",
      "Image forest62.png: PSNR = 31.36, SSIM = 0.8373\n",
      "Image forest69.png: PSNR = 29.94, SSIM = 0.6166\n",
      "Image forest73.png: PSNR = 29.52, SSIM = 0.5648\n",
      "Image forest74.png: PSNR = 30.01, SSIM = 0.5831\n",
      "Image forest80.png: PSNR = 30.94, SSIM = 0.6666\n",
      "Image forest84.png: PSNR = 29.73, SSIM = 0.5646\n",
      "Image forest93.png: PSNR = 29.57, SSIM = 0.5447\n",
      "Image freeway00.png: PSNR = 32.32, SSIM = 0.8832\n",
      "Image freeway03.png: PSNR = 32.42, SSIM = 0.8623\n",
      "Image freeway07.png: PSNR = 32.75, SSIM = 0.8995\n",
      "Image freeway09.png: PSNR = 34.01, SSIM = 0.9095\n",
      "Image freeway12.png: PSNR = 34.08, SSIM = 0.9027\n",
      "Image freeway25.png: PSNR = 31.94, SSIM = 0.7443\n",
      "Image freeway26.png: PSNR = 31.41, SSIM = 0.6930\n",
      "Image freeway44.png: PSNR = 30.86, SSIM = 0.6772\n",
      "Image freeway55.png: PSNR = 32.95, SSIM = 0.8683\n",
      "Image freeway64.png: PSNR = 32.12, SSIM = 0.8371\n",
      "Image freeway67.png: PSNR = 32.91, SSIM = 0.8687\n",
      "Image freeway71.png: PSNR = 33.81, SSIM = 0.8939\n",
      "Image freeway74.png: PSNR = 35.96, SSIM = 0.9184\n",
      "Image freeway75.png: PSNR = 35.52, SSIM = 0.9318\n",
      "Image freeway76.png: PSNR = 31.79, SSIM = 0.8396\n",
      "Image freeway77.png: PSNR = 33.82, SSIM = 0.8955\n",
      "Image freeway78.png: PSNR = 34.72, SSIM = 0.9047\n",
      "Image freeway87.png: PSNR = 29.42, SSIM = 0.5730\n",
      "Image freeway92.png: PSNR = 34.56, SSIM = 0.8817\n",
      "Image freeway93.png: PSNR = 30.75, SSIM = 0.6610\n",
      "Image golfcourse07.png: PSNR = 33.55, SSIM = 0.7978\n",
      "Image golfcourse08.png: PSNR = 32.92, SSIM = 0.7574\n",
      "Image golfcourse14.png: PSNR = 33.88, SSIM = 0.8137\n",
      "Image golfcourse17.png: PSNR = 35.18, SSIM = 0.8508\n",
      "Image golfcourse18.png: PSNR = 33.34, SSIM = 0.7957\n",
      "Image golfcourse19.png: PSNR = 31.98, SSIM = 0.7403\n",
      "Image golfcourse24.png: PSNR = 32.49, SSIM = 0.7863\n",
      "Image golfcourse27.png: PSNR = 32.02, SSIM = 0.6945\n",
      "Image golfcourse33.png: PSNR = 31.88, SSIM = 0.6760\n",
      "Image golfcourse35.png: PSNR = 32.32, SSIM = 0.7179\n",
      "Image golfcourse45.png: PSNR = 36.09, SSIM = 0.8791\n",
      "Image golfcourse50.png: PSNR = 33.99, SSIM = 0.8139\n",
      "Image golfcourse52.png: PSNR = 32.57, SSIM = 0.7623\n",
      "Image golfcourse73.png: PSNR = 36.83, SSIM = 0.9089\n",
      "Image golfcourse76.png: PSNR = 33.59, SSIM = 0.8327\n",
      "Image golfcourse77.png: PSNR = 34.18, SSIM = 0.8515\n",
      "Image golfcourse78.png: PSNR = 34.74, SSIM = 0.8694\n",
      "Image golfcourse81.png: PSNR = 33.08, SSIM = 0.7991\n",
      "Image golfcourse82.png: PSNR = 32.64, SSIM = 0.8065\n",
      "Image golfcourse85.png: PSNR = 32.61, SSIM = 0.8000\n",
      "Image harbor00.png: PSNR = 32.41, SSIM = 0.8710\n",
      "Image harbor05.png: PSNR = 30.87, SSIM = 0.8019\n",
      "Image harbor13.png: PSNR = 30.09, SSIM = 0.7832\n",
      "Image harbor14.png: PSNR = 30.29, SSIM = 0.7838\n",
      "Image harbor15.png: PSNR = 30.41, SSIM = 0.7823\n",
      "Image harbor19.png: PSNR = 31.14, SSIM = 0.8153\n",
      "Image harbor22.png: PSNR = 32.20, SSIM = 0.8964\n",
      "Image harbor24.png: PSNR = 31.34, SSIM = 0.8852\n",
      "Image harbor32.png: PSNR = 33.85, SSIM = 0.8830\n",
      "Image harbor33.png: PSNR = 33.44, SSIM = 0.8729\n",
      "Image harbor35.png: PSNR = 31.77, SSIM = 0.8305\n",
      "Image harbor49.png: PSNR = 31.34, SSIM = 0.8471\n",
      "Image harbor61.png: PSNR = 30.35, SSIM = 0.7876\n",
      "Image harbor65.png: PSNR = 30.59, SSIM = 0.7655\n",
      "Image harbor67.png: PSNR = 31.55, SSIM = 0.8768\n",
      "Image harbor68.png: PSNR = 32.32, SSIM = 0.9001\n",
      "Image harbor75.png: PSNR = 32.20, SSIM = 0.8517\n",
      "Image harbor81.png: PSNR = 32.82, SSIM = 0.8944\n",
      "Image harbor83.png: PSNR = 30.45, SSIM = 0.7976\n",
      "Image harbor88.png: PSNR = 31.12, SSIM = 0.8142\n",
      "Image intersection00.png: PSNR = 32.55, SSIM = 0.8724\n",
      "Image intersection10.png: PSNR = 32.03, SSIM = 0.8447\n",
      "Image intersection16.png: PSNR = 33.19, SSIM = 0.8064\n",
      "Image intersection19.png: PSNR = 31.78, SSIM = 0.8027\n",
      "Image intersection26.png: PSNR = 32.55, SSIM = 0.7797\n",
      "Image intersection28.png: PSNR = 31.76, SSIM = 0.7822\n",
      "Image intersection29.png: PSNR = 31.68, SSIM = 0.7629\n",
      "Image intersection30.png: PSNR = 31.20, SSIM = 0.7525\n",
      "Image intersection32.png: PSNR = 31.36, SSIM = 0.7629\n",
      "Image intersection40.png: PSNR = 31.36, SSIM = 0.7838\n",
      "Image intersection43.png: PSNR = 30.98, SSIM = 0.7738\n",
      "Image intersection44.png: PSNR = 32.40, SSIM = 0.8160\n",
      "Image intersection50.png: PSNR = 32.58, SSIM = 0.7911\n",
      "Image intersection52.png: PSNR = 32.25, SSIM = 0.7828\n",
      "Image intersection70.png: PSNR = 32.85, SSIM = 0.8725\n",
      "Image intersection76.png: PSNR = 35.55, SSIM = 0.9223\n",
      "Image intersection77.png: PSNR = 34.65, SSIM = 0.9021\n",
      "Image intersection87.png: PSNR = 32.49, SSIM = 0.7858\n",
      "Image intersection89.png: PSNR = 31.80, SSIM = 0.7504\n",
      "Image intersection99.png: PSNR = 31.81, SSIM = 0.7758\n",
      "Image mediumresidential15.png: PSNR = 30.41, SSIM = 0.6941\n",
      "Image mediumresidential19.png: PSNR = 31.57, SSIM = 0.7525\n",
      "Image mediumresidential34.png: PSNR = 31.28, SSIM = 0.8158\n",
      "Image mediumresidential40.png: PSNR = 31.01, SSIM = 0.7554\n",
      "Image mediumresidential44.png: PSNR = 30.94, SSIM = 0.7509\n",
      "Image mediumresidential49.png: PSNR = 30.97, SSIM = 0.7507\n",
      "Image mediumresidential52.png: PSNR = 31.48, SSIM = 0.7740\n",
      "Image mediumresidential53.png: PSNR = 31.15, SSIM = 0.7746\n",
      "Image mediumresidential73.png: PSNR = 29.42, SSIM = 0.6273\n",
      "Image mediumresidential76.png: PSNR = 34.38, SSIM = 0.9128\n",
      "Image mediumresidential77.png: PSNR = 35.02, SSIM = 0.9098\n",
      "Image mediumresidential78.png: PSNR = 35.45, SSIM = 0.9211\n",
      "Image mediumresidential79.png: PSNR = 35.49, SSIM = 0.9179\n",
      "Image mediumresidential80.png: PSNR = 35.01, SSIM = 0.9014\n",
      "Image mediumresidential81.png: PSNR = 30.19, SSIM = 0.7360\n",
      "Image mediumresidential83.png: PSNR = 30.74, SSIM = 0.7868\n",
      "Image mediumresidential86.png: PSNR = 30.77, SSIM = 0.7330\n",
      "Image mediumresidential89.png: PSNR = 34.10, SSIM = 0.8732\n",
      "Image mediumresidential93.png: PSNR = 32.97, SSIM = 0.8366\n",
      "Image mediumresidential97.png: PSNR = 31.26, SSIM = 0.7932\n",
      "Image mobilehomepark03.png: PSNR = 30.41, SSIM = 0.7331\n",
      "Image mobilehomepark04.png: PSNR = 30.98, SSIM = 0.7455\n",
      "Image mobilehomepark05.png: PSNR = 30.78, SSIM = 0.7783\n",
      "Image mobilehomepark16.png: PSNR = 30.93, SSIM = 0.7815\n",
      "Image mobilehomepark29.png: PSNR = 32.27, SSIM = 0.8702\n",
      "Image mobilehomepark48.png: PSNR = 31.64, SSIM = 0.8520\n",
      "Image mobilehomepark49.png: PSNR = 32.30, SSIM = 0.8798\n",
      "Image mobilehomepark50.png: PSNR = 31.91, SSIM = 0.8607\n",
      "Image mobilehomepark54.png: PSNR = 32.98, SSIM = 0.8914\n",
      "Image mobilehomepark57.png: PSNR = 32.54, SSIM = 0.8750\n",
      "Image mobilehomepark59.png: PSNR = 31.76, SSIM = 0.8554\n",
      "Image mobilehomepark61.png: PSNR = 33.02, SSIM = 0.9029\n",
      "Image mobilehomepark63.png: PSNR = 32.64, SSIM = 0.8879\n",
      "Image mobilehomepark64.png: PSNR = 32.40, SSIM = 0.8873\n",
      "Image mobilehomepark77.png: PSNR = 30.19, SSIM = 0.7042\n",
      "Image mobilehomepark80.png: PSNR = 29.37, SSIM = 0.6723\n",
      "Image mobilehomepark83.png: PSNR = 29.07, SSIM = 0.6185\n",
      "Image mobilehomepark84.png: PSNR = 28.82, SSIM = 0.5517\n",
      "Image mobilehomepark93.png: PSNR = 29.29, SSIM = 0.6670\n",
      "Image mobilehomepark95.png: PSNR = 28.87, SSIM = 0.5641\n",
      "Image overpass00.png: PSNR = 32.34, SSIM = 0.8482\n",
      "Image overpass09.png: PSNR = 31.73, SSIM = 0.8488\n",
      "Image overpass18.png: PSNR = 34.42, SSIM = 0.8903\n",
      "Image overpass19.png: PSNR = 33.27, SSIM = 0.8594\n",
      "Image overpass27.png: PSNR = 30.04, SSIM = 0.6222\n",
      "Image overpass40.png: PSNR = 31.28, SSIM = 0.7406\n",
      "Image overpass54.png: PSNR = 30.49, SSIM = 0.7033\n",
      "Image overpass56.png: PSNR = 33.36, SSIM = 0.8596\n",
      "Image overpass58.png: PSNR = 32.02, SSIM = 0.8011\n",
      "Image overpass63.png: PSNR = 31.40, SSIM = 0.7856\n",
      "Image overpass66.png: PSNR = 32.65, SSIM = 0.7836\n",
      "Image overpass72.png: PSNR = 30.42, SSIM = 0.6556\n",
      "Image overpass73.png: PSNR = 31.03, SSIM = 0.7201\n",
      "Image overpass76.png: PSNR = 31.40, SSIM = 0.7770\n",
      "Image overpass80.png: PSNR = 31.35, SSIM = 0.7151\n",
      "Image overpass85.png: PSNR = 30.57, SSIM = 0.6635\n",
      "Image overpass90.png: PSNR = 29.85, SSIM = 0.6268\n",
      "Image overpass91.png: PSNR = 30.97, SSIM = 0.7356\n",
      "Image overpass93.png: PSNR = 32.33, SSIM = 0.8261\n",
      "Image overpass95.png: PSNR = 32.18, SSIM = 0.8237\n",
      "Image parkinglot15.png: PSNR = 31.07, SSIM = 0.8483\n",
      "Image parkinglot18.png: PSNR = 31.90, SSIM = 0.8456\n",
      "Image parkinglot24.png: PSNR = 30.27, SSIM = 0.7392\n",
      "Image parkinglot40.png: PSNR = 30.53, SSIM = 0.7298\n",
      "Image parkinglot46.png: PSNR = 30.19, SSIM = 0.6962\n",
      "Image parkinglot52.png: PSNR = 31.20, SSIM = 0.7579\n",
      "Image parkinglot54.png: PSNR = 30.70, SSIM = 0.7602\n",
      "Image parkinglot61.png: PSNR = 30.86, SSIM = 0.7250\n",
      "Image parkinglot63.png: PSNR = 30.71, SSIM = 0.7742\n",
      "Image parkinglot64.png: PSNR = 30.75, SSIM = 0.7287\n",
      "Image parkinglot70.png: PSNR = 30.30, SSIM = 0.7387\n",
      "Image parkinglot71.png: PSNR = 30.46, SSIM = 0.7877\n",
      "Image parkinglot76.png: PSNR = 31.01, SSIM = 0.7815\n",
      "Image parkinglot82.png: PSNR = 31.61, SSIM = 0.8572\n",
      "Image parkinglot83.png: PSNR = 30.96, SSIM = 0.8321\n",
      "Image parkinglot93.png: PSNR = 30.40, SSIM = 0.6892\n",
      "Image parkinglot95.png: PSNR = 30.62, SSIM = 0.6767\n",
      "Image parkinglot96.png: PSNR = 30.40, SSIM = 0.6571\n",
      "Image parkinglot97.png: PSNR = 30.88, SSIM = 0.8309\n",
      "Image parkinglot99.png: PSNR = 31.64, SSIM = 0.8350\n",
      "Image river04.png: PSNR = 29.70, SSIM = 0.5677\n",
      "Image river11.png: PSNR = 29.92, SSIM = 0.5833\n",
      "Image river13.png: PSNR = 30.07, SSIM = 0.6368\n",
      "Image river16.png: PSNR = 30.70, SSIM = 0.6764\n",
      "Image river17.png: PSNR = 31.19, SSIM = 0.7031\n",
      "Image river23.png: PSNR = 30.40, SSIM = 0.6078\n",
      "Image river31.png: PSNR = 30.29, SSIM = 0.5583\n",
      "Image river33.png: PSNR = 29.50, SSIM = 0.4994\n",
      "Image river36.png: PSNR = 31.24, SSIM = 0.7542\n",
      "Image river45.png: PSNR = 30.94, SSIM = 0.7199\n",
      "Image river51.png: PSNR = 32.65, SSIM = 0.8178\n",
      "Image river66.png: PSNR = 29.19, SSIM = 0.5151\n",
      "Image river76.png: PSNR = 36.48, SSIM = 0.8913\n",
      "Image river80.png: PSNR = 32.29, SSIM = 0.7760\n",
      "Image river86.png: PSNR = 32.22, SSIM = 0.7677\n",
      "Image river89.png: PSNR = 32.61, SSIM = 0.7574\n",
      "Image river92.png: PSNR = 32.97, SSIM = 0.7848\n",
      "Image river93.png: PSNR = 31.69, SSIM = 0.7043\n",
      "Image river94.png: PSNR = 30.36, SSIM = 0.5876\n",
      "Image river99.png: PSNR = 35.17, SSIM = 0.8855\n",
      "Image runway04.png: PSNR = 33.85, SSIM = 0.8408\n",
      "Image runway07.png: PSNR = 33.42, SSIM = 0.7983\n",
      "Image runway08.png: PSNR = 33.10, SSIM = 0.7842\n",
      "Image runway11.png: PSNR = 33.64, SSIM = 0.8118\n",
      "Image runway12.png: PSNR = 33.60, SSIM = 0.7990\n",
      "Image runway16.png: PSNR = 34.12, SSIM = 0.8381\n",
      "Image runway31.png: PSNR = 34.57, SSIM = 0.8766\n",
      "Image runway39.png: PSNR = 34.30, SSIM = 0.8402\n",
      "Image runway41.png: PSNR = 32.66, SSIM = 0.8070\n",
      "Image runway42.png: PSNR = 32.71, SSIM = 0.7915\n",
      "Image runway43.png: PSNR = 32.99, SSIM = 0.8095\n",
      "Image runway56.png: PSNR = 33.28, SSIM = 0.8241\n",
      "Image runway66.png: PSNR = 32.48, SSIM = 0.7580\n",
      "Image runway67.png: PSNR = 31.22, SSIM = 0.6769\n",
      "Image runway72.png: PSNR = 35.62, SSIM = 0.8945\n",
      "Image runway74.png: PSNR = 34.79, SSIM = 0.8869\n",
      "Image runway76.png: PSNR = 35.51, SSIM = 0.8918\n",
      "Image runway82.png: PSNR = 33.55, SSIM = 0.8344\n",
      "Image runway83.png: PSNR = 33.55, SSIM = 0.8448\n",
      "Image runway95.png: PSNR = 35.41, SSIM = 0.8599\n",
      "Image sparseresidential00.png: PSNR = 30.79, SSIM = 0.6993\n",
      "Image sparseresidential01.png: PSNR = 31.19, SSIM = 0.7001\n",
      "Image sparseresidential04.png: PSNR = 30.60, SSIM = 0.6488\n",
      "Image sparseresidential07.png: PSNR = 29.62, SSIM = 0.5755\n",
      "Image sparseresidential09.png: PSNR = 29.52, SSIM = 0.5543\n",
      "Image sparseresidential11.png: PSNR = 29.82, SSIM = 0.6464\n",
      "Image sparseresidential23.png: PSNR = 30.25, SSIM = 0.6096\n",
      "Image sparseresidential28.png: PSNR = 30.85, SSIM = 0.6710\n",
      "Image sparseresidential33.png: PSNR = 30.62, SSIM = 0.6375\n",
      "Image sparseresidential41.png: PSNR = 30.50, SSIM = 0.6628\n",
      "Image sparseresidential45.png: PSNR = 37.79, SSIM = 0.9306\n",
      "Image sparseresidential64.png: PSNR = 30.80, SSIM = 0.7512\n",
      "Image sparseresidential67.png: PSNR = 30.73, SSIM = 0.7544\n",
      "Image sparseresidential70.png: PSNR = 31.53, SSIM = 0.7894\n",
      "Image sparseresidential71.png: PSNR = 30.58, SSIM = 0.7433\n",
      "Image sparseresidential72.png: PSNR = 31.27, SSIM = 0.8009\n",
      "Image sparseresidential81.png: PSNR = 32.89, SSIM = 0.8628\n",
      "Image sparseresidential82.png: PSNR = 33.10, SSIM = 0.8198\n",
      "Image sparseresidential92.png: PSNR = 30.99, SSIM = 0.7389\n",
      "Image sparseresidential95.png: PSNR = 32.13, SSIM = 0.8599\n",
      "Image storagetanks01.png: PSNR = 34.33, SSIM = 0.8839\n",
      "Image storagetanks02.png: PSNR = 34.09, SSIM = 0.8609\n",
      "Image storagetanks16.png: PSNR = 32.50, SSIM = 0.8558\n",
      "Image storagetanks24.png: PSNR = 32.28, SSIM = 0.7650\n",
      "Image storagetanks27.png: PSNR = 30.24, SSIM = 0.6735\n",
      "Image storagetanks29.png: PSNR = 30.04, SSIM = 0.6179\n",
      "Image storagetanks33.png: PSNR = 31.24, SSIM = 0.7136\n",
      "Image storagetanks36.png: PSNR = 30.76, SSIM = 0.6956\n",
      "Image storagetanks37.png: PSNR = 31.06, SSIM = 0.7001\n",
      "Image storagetanks41.png: PSNR = 30.07, SSIM = 0.6595\n",
      "Image storagetanks42.png: PSNR = 30.72, SSIM = 0.7827\n",
      "Image storagetanks43.png: PSNR = 30.82, SSIM = 0.7173\n",
      "Image storagetanks57.png: PSNR = 35.06, SSIM = 0.8587\n",
      "Image storagetanks67.png: PSNR = 36.75, SSIM = 0.9353\n",
      "Image storagetanks68.png: PSNR = 33.62, SSIM = 0.8943\n",
      "Image storagetanks69.png: PSNR = 34.13, SSIM = 0.8919\n",
      "Image storagetanks70.png: PSNR = 34.64, SSIM = 0.9069\n",
      "Image storagetanks87.png: PSNR = 37.49, SSIM = 0.9191\n",
      "Image storagetanks90.png: PSNR = 32.23, SSIM = 0.7939\n",
      "Image storagetanks91.png: PSNR = 31.41, SSIM = 0.7772\n",
      "Image tenniscourt05.png: PSNR = 31.25, SSIM = 0.7355\n",
      "Image tenniscourt13.png: PSNR = 30.81, SSIM = 0.6802\n",
      "Image tenniscourt18.png: PSNR = 33.67, SSIM = 0.8707\n",
      "Image tenniscourt19.png: PSNR = 33.10, SSIM = 0.8548\n",
      "Image tenniscourt23.png: PSNR = 36.09, SSIM = 0.9144\n",
      "Image tenniscourt24.png: PSNR = 33.20, SSIM = 0.8513\n",
      "Image tenniscourt25.png: PSNR = 32.23, SSIM = 0.8158\n",
      "Image tenniscourt26.png: PSNR = 32.21, SSIM = 0.8348\n",
      "Image tenniscourt27.png: PSNR = 32.41, SSIM = 0.8368\n",
      "Image tenniscourt37.png: PSNR = 31.58, SSIM = 0.7155\n",
      "Image tenniscourt38.png: PSNR = 31.41, SSIM = 0.7020\n",
      "Image tenniscourt44.png: PSNR = 31.57, SSIM = 0.7112\n",
      "Image tenniscourt52.png: PSNR = 33.90, SSIM = 0.8747\n",
      "Image tenniscourt60.png: PSNR = 34.71, SSIM = 0.8762\n",
      "Image tenniscourt63.png: PSNR = 33.67, SSIM = 0.8508\n",
      "Image tenniscourt81.png: PSNR = 37.29, SSIM = 0.9067\n",
      "Image tenniscourt85.png: PSNR = 34.42, SSIM = 0.8269\n",
      "Image tenniscourt88.png: PSNR = 33.72, SSIM = 0.8208\n",
      "Image tenniscourt93.png: PSNR = 33.78, SSIM = 0.8681\n",
      "Image tenniscourt95.png: PSNR = 34.28, SSIM = 0.8950\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "98d2f034",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha =  0.1\n",
      "Average PSNR: 32.27\n",
      "Average SSIM: 0.7711\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"alpha =  0.1\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "03721e64",
   "metadata": {},
   "source": [
    "# Interpolating with alpha =  0.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "4b1e71f5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interpolating with alpha =  0.2\n"
     ]
    }
   ],
   "source": [
    "#net_interp.py\n",
    "import sys\n",
    "import torch\n",
    "from collections import OrderedDict\n",
    "\n",
    "alpha =0.2\n",
    "\n",
    "net_PSNR_path = './models/RRDB_PSNR_x4.pth'\n",
    "net_ESRGAN_path = './models/RRDB_ESRGAN_x4.pth'\n",
    "net_interp_path = './models/interp_{:02d}.pth'.format(int(alpha*10))\n",
    "\n",
    "net_PSNR = torch.load(net_PSNR_path)\n",
    "net_ESRGAN = torch.load(net_ESRGAN_path)\n",
    "net_interp = OrderedDict()\n",
    "\n",
    "print('Interpolating with alpha = ', alpha)\n",
    "for k, v_PSNR in net_PSNR.items():\n",
    "    v_ESRGAN = net_ESRGAN[k]\n",
    "    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN\n",
    "\n",
    "torch.save(net_interp, net_interp_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "e6454361",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/interp_02.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "#test.py\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/interp_02.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "8adb480a",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.34, SSIM = 0.0926\n",
      "Image agricultural12.png: PSNR = 31.79, SSIM = 0.9232\n",
      "Image agricultural27.png: PSNR = 28.77, SSIM = 0.2550\n",
      "Image agricultural28.png: PSNR = 28.80, SSIM = 0.2412\n",
      "Image agricultural33.png: PSNR = 30.97, SSIM = 0.5066\n",
      "Image agricultural39.png: PSNR = 33.31, SSIM = 0.8390\n",
      "Image agricultural54.png: PSNR = 32.18, SSIM = 0.7013\n",
      "Image agricultural55.png: PSNR = 37.05, SSIM = 0.8681\n",
      "Image agricultural60.png: PSNR = 30.99, SSIM = 0.7678\n",
      "Image agricultural61.png: PSNR = 34.27, SSIM = 0.9603\n",
      "Image agricultural62.png: PSNR = 28.65, SSIM = 0.2041\n",
      "Image agricultural63.png: PSNR = 30.20, SSIM = 0.4255\n",
      "Image agricultural67.png: PSNR = 27.84, SSIM = 0.0947\n",
      "Image agricultural69.png: PSNR = 27.73, SSIM = 0.0907\n",
      "Image agricultural72.png: PSNR = 27.88, SSIM = 0.1001\n",
      "Image agricultural74.png: PSNR = 29.17, SSIM = 0.4401\n",
      "Image agricultural76.png: PSNR = 30.43, SSIM = 0.7324\n",
      "Image agricultural83.png: PSNR = 28.24, SSIM = 0.1829\n",
      "Image agricultural84.png: PSNR = 28.12, SSIM = 0.1241\n",
      "Image agricultural85.png: PSNR = 28.05, SSIM = 0.1070\n",
      "Image airplane04.png: PSNR = 33.93, SSIM = 0.8983\n",
      "Image airplane09.png: PSNR = 33.59, SSIM = 0.8927\n",
      "Image airplane17.png: PSNR = 32.28, SSIM = 0.8306\n",
      "Image airplane25.png: PSNR = 34.22, SSIM = 0.8653\n",
      "Image airplane28.png: PSNR = 31.80, SSIM = 0.7342\n",
      "Image airplane29.png: PSNR = 31.79, SSIM = 0.7587\n",
      "Image airplane30.png: PSNR = 31.81, SSIM = 0.7795\n",
      "Image airplane32.png: PSNR = 32.78, SSIM = 0.7853\n",
      "Image airplane40.png: PSNR = 32.95, SSIM = 0.8305\n",
      "Image airplane48.png: PSNR = 31.04, SSIM = 0.8128\n",
      "Image airplane55.png: PSNR = 31.95, SSIM = 0.8207\n",
      "Image airplane65.png: PSNR = 31.17, SSIM = 0.7898\n",
      "Image airplane71.png: PSNR = 31.59, SSIM = 0.8007\n",
      "Image airplane74.png: PSNR = 33.52, SSIM = 0.8751\n",
      "Image airplane75.png: PSNR = 33.79, SSIM = 0.8825\n",
      "Image airplane80.png: PSNR = 36.38, SSIM = 0.9284\n",
      "Image airplane81.png: PSNR = 33.41, SSIM = 0.8458\n",
      "Image airplane85.png: PSNR = 33.87, SSIM = 0.8656\n",
      "Image airplane86.png: PSNR = 32.61, SSIM = 0.7775\n",
      "Image airplane87.png: PSNR = 31.26, SSIM = 0.7874\n",
      "Image baseballdiamond03.png: PSNR = 34.76, SSIM = 0.8429\n",
      "Image baseballdiamond04.png: PSNR = 33.37, SSIM = 0.8069\n",
      "Image baseballdiamond05.png: PSNR = 32.74, SSIM = 0.7902\n",
      "Image baseballdiamond13.png: PSNR = 32.03, SSIM = 0.7693\n",
      "Image baseballdiamond16.png: PSNR = 31.28, SSIM = 0.6657\n",
      "Image baseballdiamond24.png: PSNR = 32.74, SSIM = 0.7351\n",
      "Image baseballdiamond31.png: PSNR = 33.59, SSIM = 0.8648\n",
      "Image baseballdiamond32.png: PSNR = 37.45, SSIM = 0.9306\n",
      "Image baseballdiamond37.png: PSNR = 33.66, SSIM = 0.8617\n",
      "Image baseballdiamond40.png: PSNR = 33.34, SSIM = 0.8520\n",
      "Image baseballdiamond47.png: PSNR = 32.28, SSIM = 0.8059\n",
      "Image baseballdiamond50.png: PSNR = 32.95, SSIM = 0.8371\n",
      "Image baseballdiamond53.png: PSNR = 37.95, SSIM = 0.9379\n",
      "Image baseballdiamond58.png: PSNR = 34.91, SSIM = 0.9014\n",
      "Image baseballdiamond72.png: PSNR = 37.18, SSIM = 0.9091\n",
      "Image baseballdiamond74.png: PSNR = 37.25, SSIM = 0.9225\n",
      "Image baseballdiamond79.png: PSNR = 30.59, SSIM = 0.5998\n",
      "Image baseballdiamond81.png: PSNR = 34.01, SSIM = 0.8369\n",
      "Image baseballdiamond83.png: PSNR = 35.84, SSIM = 0.8512\n",
      "Image baseballdiamond96.png: PSNR = 34.88, SSIM = 0.9024\n",
      "Image beach02.png: PSNR = 32.02, SSIM = 0.7453\n",
      "Image beach11.png: PSNR = 38.22, SSIM = 0.9253\n",
      "Image beach13.png: PSNR = 40.30, SSIM = 0.9514\n",
      "Image beach16.png: PSNR = 43.32, SSIM = 0.9754\n",
      "Image beach19.png: PSNR = 36.63, SSIM = 0.9156\n",
      "Image beach26.png: PSNR = 39.19, SSIM = 0.9395\n",
      "Image beach46.png: PSNR = 34.08, SSIM = 0.8215\n",
      "Image beach50.png: PSNR = 36.62, SSIM = 0.9106\n",
      "Image beach54.png: PSNR = 37.29, SSIM = 0.9135\n",
      "Image beach60.png: PSNR = 34.46, SSIM = 0.8569\n",
      "Image beach72.png: PSNR = 34.64, SSIM = 0.8466\n",
      "Image beach73.png: PSNR = 32.14, SSIM = 0.7032\n",
      "Image beach76.png: PSNR = 38.78, SSIM = 0.9436\n",
      "Image beach85.png: PSNR = 38.01, SSIM = 0.9302\n",
      "Image beach86.png: PSNR = 38.44, SSIM = 0.9288\n",
      "Image beach88.png: PSNR = 38.28, SSIM = 0.9393\n",
      "Image beach89.png: PSNR = 39.34, SSIM = 0.9508\n",
      "Image beach94.png: PSNR = 33.68, SSIM = 0.8405\n",
      "Image beach97.png: PSNR = 33.70, SSIM = 0.8473\n",
      "Image beach99.png: PSNR = 33.81, SSIM = 0.8399\n",
      "Image buildings27.png: PSNR = 31.99, SSIM = 0.7707\n",
      "Image buildings32.png: PSNR = 31.52, SSIM = 0.8106\n",
      "Image buildings34.png: PSNR = 35.21, SSIM = 0.9137\n",
      "Image buildings35.png: PSNR = 32.77, SSIM = 0.8455\n",
      "Image buildings36.png: PSNR = 30.90, SSIM = 0.7870\n",
      "Image buildings44.png: PSNR = 30.61, SSIM = 0.7755\n",
      "Image buildings45.png: PSNR = 31.90, SSIM = 0.8418\n",
      "Image buildings46.png: PSNR = 30.94, SSIM = 0.7739\n",
      "Image buildings51.png: PSNR = 31.90, SSIM = 0.8414\n",
      "Image buildings52.png: PSNR = 37.87, SSIM = 0.9604\n",
      "Image buildings56.png: PSNR = 31.33, SSIM = 0.7840\n",
      "Image buildings63.png: PSNR = 32.16, SSIM = 0.8421\n",
      "Image buildings64.png: PSNR = 33.27, SSIM = 0.8996\n",
      "Image buildings65.png: PSNR = 35.72, SSIM = 0.9138\n",
      "Image buildings69.png: PSNR = 34.45, SSIM = 0.9203\n",
      "Image buildings73.png: PSNR = 33.38, SSIM = 0.8948\n",
      "Image buildings74.png: PSNR = 32.82, SSIM = 0.8625\n",
      "Image buildings79.png: PSNR = 29.96, SSIM = 0.6519\n",
      "Image buildings89.png: PSNR = 31.90, SSIM = 0.8351\n",
      "Image buildings93.png: PSNR = 31.41, SSIM = 0.7913\n",
      "Image chaparral09.png: PSNR = 30.32, SSIM = 0.7774\n",
      "Image chaparral15.png: PSNR = 31.33, SSIM = 0.8440\n",
      "Image chaparral17.png: PSNR = 32.80, SSIM = 0.8274\n",
      "Image chaparral23.png: PSNR = 30.26, SSIM = 0.7985\n",
      "Image chaparral26.png: PSNR = 30.21, SSIM = 0.7457\n",
      "Image chaparral33.png: PSNR = 31.34, SSIM = 0.8481\n",
      "Image chaparral37.png: PSNR = 30.92, SSIM = 0.8270\n",
      "Image chaparral42.png: PSNR = 29.36, SSIM = 0.5593\n",
      "Image chaparral43.png: PSNR = 30.73, SSIM = 0.7608\n",
      "Image chaparral50.png: PSNR = 30.11, SSIM = 0.7411\n",
      "Image chaparral55.png: PSNR = 30.18, SSIM = 0.8004\n",
      "Image chaparral61.png: PSNR = 28.24, SSIM = 0.2532\n",
      "Image chaparral63.png: PSNR = 28.21, SSIM = 0.2202\n",
      "Image chaparral64.png: PSNR = 28.15, SSIM = 0.2503\n",
      "Image chaparral68.png: PSNR = 30.85, SSIM = 0.8288\n",
      "Image chaparral71.png: PSNR = 30.36, SSIM = 0.7717\n",
      "Image chaparral80.png: PSNR = 29.93, SSIM = 0.6938\n",
      "Image chaparral83.png: PSNR = 29.66, SSIM = 0.6967\n",
      "Image chaparral88.png: PSNR = 31.60, SSIM = 0.8172\n",
      "Image chaparral99.png: PSNR = 29.71, SSIM = 0.7530\n",
      "Image denseresidential02.png: PSNR = 31.62, SSIM = 0.8709\n",
      "Image denseresidential12.png: PSNR = 31.77, SSIM = 0.8880\n",
      "Image denseresidential14.png: PSNR = 30.79, SSIM = 0.8112\n",
      "Image denseresidential15.png: PSNR = 30.65, SSIM = 0.8210\n",
      "Image denseresidential29.png: PSNR = 30.71, SSIM = 0.7852\n",
      "Image denseresidential31.png: PSNR = 31.21, SSIM = 0.8383\n",
      "Image denseresidential34.png: PSNR = 31.60, SSIM = 0.7713\n",
      "Image denseresidential38.png: PSNR = 30.70, SSIM = 0.7464\n",
      "Image denseresidential46.png: PSNR = 31.31, SSIM = 0.8198\n",
      "Image denseresidential53.png: PSNR = 31.06, SSIM = 0.7735\n",
      "Image denseresidential60.png: PSNR = 31.34, SSIM = 0.8380\n",
      "Image denseresidential64.png: PSNR = 31.39, SSIM = 0.8460\n",
      "Image denseresidential65.png: PSNR = 30.93, SSIM = 0.7893\n",
      "Image denseresidential68.png: PSNR = 31.00, SSIM = 0.7974\n",
      "Image denseresidential75.png: PSNR = 31.55, SSIM = 0.8251\n",
      "Image denseresidential88.png: PSNR = 31.96, SSIM = 0.7966\n",
      "Image denseresidential89.png: PSNR = 31.63, SSIM = 0.7771\n",
      "Image denseresidential91.png: PSNR = 32.28, SSIM = 0.8298\n",
      "Image denseresidential96.png: PSNR = 30.77, SSIM = 0.7662\n",
      "Image denseresidential97.png: PSNR = 30.96, SSIM = 0.7697\n",
      "Image forest08.png: PSNR = 30.12, SSIM = 0.6052\n",
      "Image forest09.png: PSNR = 29.87, SSIM = 0.5768\n",
      "Image forest10.png: PSNR = 32.58, SSIM = 0.7299\n",
      "Image forest11.png: PSNR = 31.44, SSIM = 0.6742\n",
      "Image forest12.png: PSNR = 31.24, SSIM = 0.6535\n",
      "Image forest19.png: PSNR = 28.97, SSIM = 0.4803\n",
      "Image forest20.png: PSNR = 28.68, SSIM = 0.4692\n",
      "Image forest29.png: PSNR = 30.24, SSIM = 0.6504\n",
      "Image forest34.png: PSNR = 30.50, SSIM = 0.6748\n",
      "Image forest39.png: PSNR = 31.13, SSIM = 0.7269\n",
      "Image forest45.png: PSNR = 31.43, SSIM = 0.7494\n",
      "Image forest53.png: PSNR = 31.22, SSIM = 0.7552\n",
      "Image forest56.png: PSNR = 30.38, SSIM = 0.7202\n",
      "Image forest62.png: PSNR = 31.33, SSIM = 0.8375\n",
      "Image forest69.png: PSNR = 29.90, SSIM = 0.6177\n",
      "Image forest73.png: PSNR = 29.52, SSIM = 0.5660\n",
      "Image forest74.png: PSNR = 30.00, SSIM = 0.5847\n",
      "Image forest80.png: PSNR = 30.93, SSIM = 0.6673\n",
      "Image forest84.png: PSNR = 29.72, SSIM = 0.5677\n",
      "Image forest93.png: PSNR = 29.54, SSIM = 0.5464\n",
      "Image freeway00.png: PSNR = 32.22, SSIM = 0.8824\n",
      "Image freeway03.png: PSNR = 32.32, SSIM = 0.8619\n",
      "Image freeway07.png: PSNR = 32.60, SSIM = 0.8977\n",
      "Image freeway09.png: PSNR = 33.85, SSIM = 0.9092\n",
      "Image freeway12.png: PSNR = 33.97, SSIM = 0.9024\n",
      "Image freeway25.png: PSNR = 31.88, SSIM = 0.7439\n",
      "Image freeway26.png: PSNR = 31.36, SSIM = 0.6931\n",
      "Image freeway44.png: PSNR = 30.76, SSIM = 0.6721\n",
      "Image freeway55.png: PSNR = 32.81, SSIM = 0.8675\n",
      "Image freeway64.png: PSNR = 31.98, SSIM = 0.8348\n",
      "Image freeway67.png: PSNR = 32.78, SSIM = 0.8671\n",
      "Image freeway71.png: PSNR = 33.65, SSIM = 0.8934\n",
      "Image freeway74.png: PSNR = 35.66, SSIM = 0.9178\n",
      "Image freeway75.png: PSNR = 35.39, SSIM = 0.9321\n",
      "Image freeway76.png: PSNR = 31.68, SSIM = 0.8378\n",
      "Image freeway77.png: PSNR = 33.64, SSIM = 0.8931\n",
      "Image freeway78.png: PSNR = 34.61, SSIM = 0.9047\n",
      "Image freeway87.png: PSNR = 29.38, SSIM = 0.5723\n",
      "Image freeway92.png: PSNR = 34.34, SSIM = 0.8808\n",
      "Image freeway93.png: PSNR = 30.72, SSIM = 0.6613\n",
      "Image golfcourse07.png: PSNR = 33.47, SSIM = 0.7977\n",
      "Image golfcourse08.png: PSNR = 32.83, SSIM = 0.7577\n",
      "Image golfcourse14.png: PSNR = 33.77, SSIM = 0.8138\n",
      "Image golfcourse17.png: PSNR = 35.03, SSIM = 0.8506\n",
      "Image golfcourse18.png: PSNR = 33.26, SSIM = 0.7956\n",
      "Image golfcourse19.png: PSNR = 31.89, SSIM = 0.7405\n",
      "Image golfcourse24.png: PSNR = 32.40, SSIM = 0.7861\n",
      "Image golfcourse27.png: PSNR = 31.94, SSIM = 0.6950\n",
      "Image golfcourse33.png: PSNR = 31.80, SSIM = 0.6768\n",
      "Image golfcourse35.png: PSNR = 32.23, SSIM = 0.7187\n",
      "Image golfcourse45.png: PSNR = 35.82, SSIM = 0.8788\n",
      "Image golfcourse50.png: PSNR = 33.78, SSIM = 0.8136\n",
      "Image golfcourse52.png: PSNR = 32.42, SSIM = 0.7618\n",
      "Image golfcourse73.png: PSNR = 36.47, SSIM = 0.9087\n",
      "Image golfcourse76.png: PSNR = 33.44, SSIM = 0.8328\n",
      "Image golfcourse77.png: PSNR = 34.03, SSIM = 0.8516\n",
      "Image golfcourse78.png: PSNR = 34.52, SSIM = 0.8691\n",
      "Image golfcourse81.png: PSNR = 32.97, SSIM = 0.7989\n",
      "Image golfcourse82.png: PSNR = 32.53, SSIM = 0.8059\n",
      "Image golfcourse85.png: PSNR = 32.49, SSIM = 0.7994\n",
      "Image harbor00.png: PSNR = 32.34, SSIM = 0.8696\n",
      "Image harbor05.png: PSNR = 30.83, SSIM = 0.8009\n",
      "Image harbor13.png: PSNR = 30.07, SSIM = 0.7817\n",
      "Image harbor14.png: PSNR = 30.25, SSIM = 0.7828\n",
      "Image harbor15.png: PSNR = 30.37, SSIM = 0.7814\n",
      "Image harbor19.png: PSNR = 31.09, SSIM = 0.8151\n",
      "Image harbor22.png: PSNR = 32.16, SSIM = 0.8947\n",
      "Image harbor24.png: PSNR = 31.31, SSIM = 0.8834\n",
      "Image harbor32.png: PSNR = 33.76, SSIM = 0.8828\n",
      "Image harbor33.png: PSNR = 33.36, SSIM = 0.8728\n",
      "Image harbor35.png: PSNR = 31.72, SSIM = 0.8302\n",
      "Image harbor49.png: PSNR = 31.28, SSIM = 0.8451\n",
      "Image harbor61.png: PSNR = 30.25, SSIM = 0.7841\n",
      "Image harbor65.png: PSNR = 30.56, SSIM = 0.7625\n",
      "Image harbor67.png: PSNR = 31.51, SSIM = 0.8757\n",
      "Image harbor68.png: PSNR = 32.22, SSIM = 0.8989\n",
      "Image harbor75.png: PSNR = 32.15, SSIM = 0.8511\n",
      "Image harbor81.png: PSNR = 32.73, SSIM = 0.8936\n",
      "Image harbor83.png: PSNR = 30.42, SSIM = 0.7945\n",
      "Image harbor88.png: PSNR = 31.05, SSIM = 0.8084\n",
      "Image intersection00.png: PSNR = 32.43, SSIM = 0.8717\n",
      "Image intersection10.png: PSNR = 31.95, SSIM = 0.8440\n",
      "Image intersection16.png: PSNR = 33.09, SSIM = 0.8063\n",
      "Image intersection19.png: PSNR = 31.72, SSIM = 0.8026\n",
      "Image intersection26.png: PSNR = 32.48, SSIM = 0.7790\n",
      "Image intersection28.png: PSNR = 31.69, SSIM = 0.7809\n",
      "Image intersection29.png: PSNR = 31.63, SSIM = 0.7630\n",
      "Image intersection30.png: PSNR = 31.14, SSIM = 0.7520\n",
      "Image intersection32.png: PSNR = 31.32, SSIM = 0.7634\n",
      "Image intersection40.png: PSNR = 31.31, SSIM = 0.7834\n",
      "Image intersection43.png: PSNR = 30.92, SSIM = 0.7731\n",
      "Image intersection44.png: PSNR = 32.30, SSIM = 0.8149\n",
      "Image intersection50.png: PSNR = 32.50, SSIM = 0.7910\n",
      "Image intersection52.png: PSNR = 32.22, SSIM = 0.7825\n",
      "Image intersection70.png: PSNR = 32.75, SSIM = 0.8720\n",
      "Image intersection76.png: PSNR = 35.29, SSIM = 0.9212\n",
      "Image intersection77.png: PSNR = 34.51, SSIM = 0.9015\n",
      "Image intersection87.png: PSNR = 32.43, SSIM = 0.7854\n",
      "Image intersection89.png: PSNR = 31.73, SSIM = 0.7494\n",
      "Image intersection99.png: PSNR = 31.73, SSIM = 0.7731\n",
      "Image mediumresidential15.png: PSNR = 30.36, SSIM = 0.6938\n",
      "Image mediumresidential19.png: PSNR = 31.50, SSIM = 0.7515\n",
      "Image mediumresidential34.png: PSNR = 31.18, SSIM = 0.8149\n",
      "Image mediumresidential40.png: PSNR = 30.93, SSIM = 0.7533\n",
      "Image mediumresidential44.png: PSNR = 30.87, SSIM = 0.7514\n",
      "Image mediumresidential49.png: PSNR = 30.88, SSIM = 0.7468\n",
      "Image mediumresidential52.png: PSNR = 31.41, SSIM = 0.7723\n",
      "Image mediumresidential53.png: PSNR = 31.09, SSIM = 0.7747\n",
      "Image mediumresidential73.png: PSNR = 29.39, SSIM = 0.6263\n",
      "Image mediumresidential76.png: PSNR = 34.14, SSIM = 0.9115\n",
      "Image mediumresidential77.png: PSNR = 34.76, SSIM = 0.9084\n",
      "Image mediumresidential78.png: PSNR = 35.22, SSIM = 0.9204\n",
      "Image mediumresidential79.png: PSNR = 35.22, SSIM = 0.9166\n",
      "Image mediumresidential80.png: PSNR = 34.82, SSIM = 0.9007\n",
      "Image mediumresidential81.png: PSNR = 30.16, SSIM = 0.7351\n",
      "Image mediumresidential83.png: PSNR = 30.67, SSIM = 0.7844\n",
      "Image mediumresidential86.png: PSNR = 30.75, SSIM = 0.7320\n",
      "Image mediumresidential89.png: PSNR = 33.99, SSIM = 0.8728\n",
      "Image mediumresidential93.png: PSNR = 32.88, SSIM = 0.8371\n",
      "Image mediumresidential97.png: PSNR = 31.20, SSIM = 0.7931\n",
      "Image mobilehomepark03.png: PSNR = 30.35, SSIM = 0.7316\n",
      "Image mobilehomepark04.png: PSNR = 30.92, SSIM = 0.7452\n",
      "Image mobilehomepark05.png: PSNR = 30.73, SSIM = 0.7772\n",
      "Image mobilehomepark16.png: PSNR = 30.88, SSIM = 0.7803\n",
      "Image mobilehomepark29.png: PSNR = 32.16, SSIM = 0.8692\n",
      "Image mobilehomepark48.png: PSNR = 31.54, SSIM = 0.8507\n",
      "Image mobilehomepark49.png: PSNR = 32.19, SSIM = 0.8783\n",
      "Image mobilehomepark50.png: PSNR = 31.83, SSIM = 0.8595\n",
      "Image mobilehomepark54.png: PSNR = 32.89, SSIM = 0.8904\n",
      "Image mobilehomepark57.png: PSNR = 32.48, SSIM = 0.8747\n",
      "Image mobilehomepark59.png: PSNR = 31.68, SSIM = 0.8538\n",
      "Image mobilehomepark61.png: PSNR = 32.93, SSIM = 0.9025\n",
      "Image mobilehomepark63.png: PSNR = 32.56, SSIM = 0.8872\n",
      "Image mobilehomepark64.png: PSNR = 32.29, SSIM = 0.8862\n",
      "Image mobilehomepark77.png: PSNR = 30.14, SSIM = 0.7042\n",
      "Image mobilehomepark80.png: PSNR = 29.32, SSIM = 0.6706\n",
      "Image mobilehomepark83.png: PSNR = 29.05, SSIM = 0.6197\n",
      "Image mobilehomepark84.png: PSNR = 28.79, SSIM = 0.5509\n",
      "Image mobilehomepark93.png: PSNR = 29.24, SSIM = 0.6668\n",
      "Image mobilehomepark95.png: PSNR = 28.85, SSIM = 0.5626\n",
      "Image overpass00.png: PSNR = 32.24, SSIM = 0.8464\n",
      "Image overpass09.png: PSNR = 31.67, SSIM = 0.8482\n",
      "Image overpass18.png: PSNR = 34.19, SSIM = 0.8892\n",
      "Image overpass19.png: PSNR = 33.10, SSIM = 0.8574\n",
      "Image overpass27.png: PSNR = 29.98, SSIM = 0.6220\n",
      "Image overpass40.png: PSNR = 31.20, SSIM = 0.7393\n",
      "Image overpass54.png: PSNR = 30.44, SSIM = 0.7024\n",
      "Image overpass56.png: PSNR = 33.26, SSIM = 0.8589\n",
      "Image overpass58.png: PSNR = 31.94, SSIM = 0.7999\n",
      "Image overpass63.png: PSNR = 31.34, SSIM = 0.7838\n",
      "Image overpass66.png: PSNR = 32.58, SSIM = 0.7829\n",
      "Image overpass72.png: PSNR = 30.35, SSIM = 0.6534\n",
      "Image overpass73.png: PSNR = 31.05, SSIM = 0.7228\n",
      "Image overpass76.png: PSNR = 31.31, SSIM = 0.7714\n",
      "Image overpass80.png: PSNR = 31.30, SSIM = 0.7155\n",
      "Image overpass85.png: PSNR = 30.57, SSIM = 0.6635\n",
      "Image overpass90.png: PSNR = 29.81, SSIM = 0.6233\n",
      "Image overpass91.png: PSNR = 30.95, SSIM = 0.7361\n",
      "Image overpass93.png: PSNR = 32.22, SSIM = 0.8245\n",
      "Image overpass95.png: PSNR = 32.09, SSIM = 0.8218\n",
      "Image parkinglot15.png: PSNR = 31.00, SSIM = 0.8462\n",
      "Image parkinglot18.png: PSNR = 31.81, SSIM = 0.8453\n",
      "Image parkinglot24.png: PSNR = 30.23, SSIM = 0.7399\n",
      "Image parkinglot40.png: PSNR = 30.49, SSIM = 0.7295\n",
      "Image parkinglot46.png: PSNR = 30.16, SSIM = 0.6946\n",
      "Image parkinglot52.png: PSNR = 31.16, SSIM = 0.7565\n",
      "Image parkinglot54.png: PSNR = 30.62, SSIM = 0.7592\n",
      "Image parkinglot61.png: PSNR = 30.82, SSIM = 0.7245\n",
      "Image parkinglot63.png: PSNR = 30.67, SSIM = 0.7746\n",
      "Image parkinglot64.png: PSNR = 30.69, SSIM = 0.7274\n",
      "Image parkinglot70.png: PSNR = 30.28, SSIM = 0.7400\n",
      "Image parkinglot71.png: PSNR = 30.39, SSIM = 0.7847\n",
      "Image parkinglot76.png: PSNR = 30.98, SSIM = 0.7793\n",
      "Image parkinglot82.png: PSNR = 31.54, SSIM = 0.8559\n",
      "Image parkinglot83.png: PSNR = 30.91, SSIM = 0.8314\n",
      "Image parkinglot93.png: PSNR = 30.38, SSIM = 0.6879\n",
      "Image parkinglot95.png: PSNR = 30.62, SSIM = 0.6770\n",
      "Image parkinglot96.png: PSNR = 30.37, SSIM = 0.6576\n",
      "Image parkinglot97.png: PSNR = 30.81, SSIM = 0.8291\n",
      "Image parkinglot99.png: PSNR = 31.55, SSIM = 0.8330\n",
      "Image river04.png: PSNR = 29.69, SSIM = 0.5689\n",
      "Image river11.png: PSNR = 29.90, SSIM = 0.5843\n",
      "Image river13.png: PSNR = 30.03, SSIM = 0.6371\n",
      "Image river16.png: PSNR = 30.70, SSIM = 0.6770\n",
      "Image river17.png: PSNR = 31.15, SSIM = 0.7036\n",
      "Image river23.png: PSNR = 30.38, SSIM = 0.6087\n",
      "Image river31.png: PSNR = 30.28, SSIM = 0.5592\n",
      "Image river33.png: PSNR = 29.49, SSIM = 0.5006\n",
      "Image river36.png: PSNR = 31.20, SSIM = 0.7544\n",
      "Image river45.png: PSNR = 30.89, SSIM = 0.7200\n",
      "Image river51.png: PSNR = 32.55, SSIM = 0.8174\n",
      "Image river66.png: PSNR = 29.17, SSIM = 0.5149\n",
      "Image river76.png: PSNR = 36.38, SSIM = 0.8912\n",
      "Image river80.png: PSNR = 32.19, SSIM = 0.7756\n",
      "Image river86.png: PSNR = 32.18, SSIM = 0.7682\n",
      "Image river89.png: PSNR = 32.58, SSIM = 0.7581\n",
      "Image river92.png: PSNR = 32.90, SSIM = 0.7847\n",
      "Image river93.png: PSNR = 31.62, SSIM = 0.7046\n",
      "Image river94.png: PSNR = 30.33, SSIM = 0.5879\n",
      "Image river99.png: PSNR = 35.07, SSIM = 0.8853\n",
      "Image runway04.png: PSNR = 33.76, SSIM = 0.8408\n",
      "Image runway07.png: PSNR = 33.38, SSIM = 0.7984\n",
      "Image runway08.png: PSNR = 33.08, SSIM = 0.7850\n",
      "Image runway11.png: PSNR = 33.57, SSIM = 0.8116\n",
      "Image runway12.png: PSNR = 33.55, SSIM = 0.7995\n",
      "Image runway16.png: PSNR = 34.01, SSIM = 0.8380\n",
      "Image runway31.png: PSNR = 34.49, SSIM = 0.8764\n",
      "Image runway39.png: PSNR = 34.11, SSIM = 0.8379\n",
      "Image runway41.png: PSNR = 32.55, SSIM = 0.8056\n",
      "Image runway42.png: PSNR = 32.62, SSIM = 0.7910\n",
      "Image runway43.png: PSNR = 32.90, SSIM = 0.8088\n",
      "Image runway56.png: PSNR = 33.16, SSIM = 0.8246\n",
      "Image runway66.png: PSNR = 32.38, SSIM = 0.7575\n",
      "Image runway67.png: PSNR = 31.17, SSIM = 0.6789\n",
      "Image runway72.png: PSNR = 35.45, SSIM = 0.8942\n",
      "Image runway74.png: PSNR = 34.65, SSIM = 0.8860\n",
      "Image runway76.png: PSNR = 35.33, SSIM = 0.8910\n",
      "Image runway82.png: PSNR = 33.53, SSIM = 0.8359\n",
      "Image runway83.png: PSNR = 33.45, SSIM = 0.8436\n",
      "Image runway95.png: PSNR = 35.34, SSIM = 0.8603\n",
      "Image sparseresidential00.png: PSNR = 30.71, SSIM = 0.6982\n",
      "Image sparseresidential01.png: PSNR = 31.13, SSIM = 0.7004\n",
      "Image sparseresidential04.png: PSNR = 30.55, SSIM = 0.6488\n",
      "Image sparseresidential07.png: PSNR = 29.58, SSIM = 0.5764\n",
      "Image sparseresidential09.png: PSNR = 29.49, SSIM = 0.5558\n",
      "Image sparseresidential11.png: PSNR = 29.79, SSIM = 0.6468\n",
      "Image sparseresidential23.png: PSNR = 30.22, SSIM = 0.6103\n",
      "Image sparseresidential28.png: PSNR = 30.82, SSIM = 0.6717\n",
      "Image sparseresidential33.png: PSNR = 30.58, SSIM = 0.6379\n",
      "Image sparseresidential41.png: PSNR = 30.45, SSIM = 0.6629\n",
      "Image sparseresidential45.png: PSNR = 37.46, SSIM = 0.9303\n",
      "Image sparseresidential64.png: PSNR = 30.75, SSIM = 0.7511\n",
      "Image sparseresidential67.png: PSNR = 30.69, SSIM = 0.7540\n",
      "Image sparseresidential70.png: PSNR = 31.46, SSIM = 0.7893\n",
      "Image sparseresidential71.png: PSNR = 30.52, SSIM = 0.7424\n",
      "Image sparseresidential72.png: PSNR = 31.21, SSIM = 0.7999\n",
      "Image sparseresidential81.png: PSNR = 32.72, SSIM = 0.8626\n",
      "Image sparseresidential82.png: PSNR = 32.94, SSIM = 0.8196\n",
      "Image sparseresidential92.png: PSNR = 30.91, SSIM = 0.7388\n",
      "Image sparseresidential95.png: PSNR = 31.99, SSIM = 0.8593\n",
      "Image storagetanks01.png: PSNR = 34.18, SSIM = 0.8836\n",
      "Image storagetanks02.png: PSNR = 33.91, SSIM = 0.8598\n",
      "Image storagetanks16.png: PSNR = 32.40, SSIM = 0.8557\n",
      "Image storagetanks24.png: PSNR = 32.20, SSIM = 0.7653\n",
      "Image storagetanks27.png: PSNR = 30.19, SSIM = 0.6743\n",
      "Image storagetanks29.png: PSNR = 30.01, SSIM = 0.6240\n",
      "Image storagetanks33.png: PSNR = 31.15, SSIM = 0.7074\n",
      "Image storagetanks36.png: PSNR = 30.71, SSIM = 0.6959\n",
      "Image storagetanks37.png: PSNR = 30.98, SSIM = 0.6988\n",
      "Image storagetanks41.png: PSNR = 30.01, SSIM = 0.6598\n",
      "Image storagetanks42.png: PSNR = 30.71, SSIM = 0.7812\n",
      "Image storagetanks43.png: PSNR = 30.79, SSIM = 0.7173\n",
      "Image storagetanks57.png: PSNR = 34.93, SSIM = 0.8586\n",
      "Image storagetanks67.png: PSNR = 36.48, SSIM = 0.9349\n",
      "Image storagetanks68.png: PSNR = 33.50, SSIM = 0.8943\n",
      "Image storagetanks69.png: PSNR = 34.03, SSIM = 0.8916\n",
      "Image storagetanks70.png: PSNR = 34.48, SSIM = 0.9068\n",
      "Image storagetanks87.png: PSNR = 37.22, SSIM = 0.9185\n",
      "Image storagetanks90.png: PSNR = 32.12, SSIM = 0.7922\n",
      "Image storagetanks91.png: PSNR = 31.32, SSIM = 0.7766\n",
      "Image tenniscourt05.png: PSNR = 31.20, SSIM = 0.7337\n",
      "Image tenniscourt13.png: PSNR = 30.76, SSIM = 0.6789\n",
      "Image tenniscourt18.png: PSNR = 33.58, SSIM = 0.8702\n",
      "Image tenniscourt19.png: PSNR = 33.02, SSIM = 0.8544\n",
      "Image tenniscourt23.png: PSNR = 35.73, SSIM = 0.9114\n",
      "Image tenniscourt24.png: PSNR = 33.06, SSIM = 0.8487\n",
      "Image tenniscourt25.png: PSNR = 32.13, SSIM = 0.8127\n",
      "Image tenniscourt26.png: PSNR = 32.13, SSIM = 0.8329\n",
      "Image tenniscourt27.png: PSNR = 32.29, SSIM = 0.8351\n",
      "Image tenniscourt37.png: PSNR = 31.51, SSIM = 0.7122\n",
      "Image tenniscourt38.png: PSNR = 31.34, SSIM = 0.7001\n",
      "Image tenniscourt44.png: PSNR = 31.53, SSIM = 0.7097\n",
      "Image tenniscourt52.png: PSNR = 33.74, SSIM = 0.8726\n",
      "Image tenniscourt60.png: PSNR = 34.58, SSIM = 0.8755\n",
      "Image tenniscourt63.png: PSNR = 33.59, SSIM = 0.8490\n",
      "Image tenniscourt81.png: PSNR = 37.02, SSIM = 0.9062\n",
      "Image tenniscourt85.png: PSNR = 34.25, SSIM = 0.8242\n",
      "Image tenniscourt88.png: PSNR = 33.61, SSIM = 0.8187\n",
      "Image tenniscourt93.png: PSNR = 33.66, SSIM = 0.8673\n",
      "Image tenniscourt95.png: PSNR = 34.09, SSIM = 0.8930\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "ea2b2b36",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha = 0.2\n",
      "Average PSNR: 32.17\n",
      "Average SSIM: 0.7706\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"alpha = 0.2\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79a947a1",
   "metadata": {},
   "source": [
    "# Interpolating with alpha =  0.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "b4c6db37",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interpolating with alpha =  0.3\n"
     ]
    }
   ],
   "source": [
    "#net_interp.py\n",
    "import sys\n",
    "import torch\n",
    "from collections import OrderedDict\n",
    "\n",
    "alpha =0.3\n",
    "\n",
    "net_PSNR_path = './models/RRDB_PSNR_x4.pth'\n",
    "net_ESRGAN_path = './models/RRDB_ESRGAN_x4.pth'\n",
    "net_interp_path = './models/interp_{:02d}.pth'.format(int(alpha*10))\n",
    "\n",
    "net_PSNR = torch.load(net_PSNR_path)\n",
    "net_ESRGAN = torch.load(net_ESRGAN_path)\n",
    "net_interp = OrderedDict()\n",
    "\n",
    "print('Interpolating with alpha = ', alpha)\n",
    "for k, v_PSNR in net_PSNR.items():\n",
    "    v_ESRGAN = net_ESRGAN[k]\n",
    "    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN\n",
    "\n",
    "torch.save(net_interp, net_interp_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "c09feac7",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/interp_03.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "#test.py\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/interp_03.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "719794f2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.34, SSIM = 0.0930\n",
      "Image agricultural12.png: PSNR = 31.45, SSIM = 0.9020\n",
      "Image agricultural27.png: PSNR = 28.76, SSIM = 0.2557\n",
      "Image agricultural28.png: PSNR = 28.79, SSIM = 0.2422\n",
      "Image agricultural33.png: PSNR = 30.95, SSIM = 0.5069\n",
      "Image agricultural39.png: PSNR = 33.08, SSIM = 0.8358\n",
      "Image agricultural54.png: PSNR = 32.07, SSIM = 0.7008\n",
      "Image agricultural55.png: PSNR = 36.75, SSIM = 0.8679\n",
      "Image agricultural60.png: PSNR = 30.85, SSIM = 0.7618\n",
      "Image agricultural61.png: PSNR = 33.95, SSIM = 0.9606\n",
      "Image agricultural62.png: PSNR = 28.64, SSIM = 0.2048\n",
      "Image agricultural63.png: PSNR = 30.15, SSIM = 0.4284\n",
      "Image agricultural67.png: PSNR = 27.85, SSIM = 0.0956\n",
      "Image agricultural69.png: PSNR = 27.73, SSIM = 0.0955\n",
      "Image agricultural72.png: PSNR = 27.88, SSIM = 0.1027\n",
      "Image agricultural74.png: PSNR = 29.14, SSIM = 0.4372\n",
      "Image agricultural76.png: PSNR = 30.43, SSIM = 0.7353\n",
      "Image agricultural83.png: PSNR = 28.23, SSIM = 0.1832\n",
      "Image agricultural84.png: PSNR = 28.12, SSIM = 0.1246\n",
      "Image agricultural85.png: PSNR = 28.05, SSIM = 0.1082\n",
      "Image airplane04.png: PSNR = 33.73, SSIM = 0.8972\n",
      "Image airplane09.png: PSNR = 33.42, SSIM = 0.8918\n",
      "Image airplane17.png: PSNR = 32.19, SSIM = 0.8300\n",
      "Image airplane25.png: PSNR = 34.05, SSIM = 0.8644\n",
      "Image airplane28.png: PSNR = 31.71, SSIM = 0.7338\n",
      "Image airplane29.png: PSNR = 31.69, SSIM = 0.7578\n",
      "Image airplane30.png: PSNR = 31.70, SSIM = 0.7783\n",
      "Image airplane32.png: PSNR = 32.62, SSIM = 0.7843\n",
      "Image airplane40.png: PSNR = 32.76, SSIM = 0.8287\n",
      "Image airplane48.png: PSNR = 30.95, SSIM = 0.8118\n",
      "Image airplane55.png: PSNR = 31.83, SSIM = 0.8192\n",
      "Image airplane65.png: PSNR = 31.07, SSIM = 0.7877\n",
      "Image airplane71.png: PSNR = 31.45, SSIM = 0.7985\n",
      "Image airplane74.png: PSNR = 33.38, SSIM = 0.8745\n",
      "Image airplane75.png: PSNR = 33.65, SSIM = 0.8816\n",
      "Image airplane80.png: PSNR = 36.07, SSIM = 0.9278\n",
      "Image airplane81.png: PSNR = 33.26, SSIM = 0.8452\n",
      "Image airplane85.png: PSNR = 33.71, SSIM = 0.8637\n",
      "Image airplane86.png: PSNR = 32.47, SSIM = 0.7767\n",
      "Image airplane87.png: PSNR = 31.16, SSIM = 0.7864\n",
      "Image baseballdiamond03.png: PSNR = 34.55, SSIM = 0.8415\n",
      "Image baseballdiamond04.png: PSNR = 33.20, SSIM = 0.8061\n",
      "Image baseballdiamond05.png: PSNR = 32.60, SSIM = 0.7896\n",
      "Image baseballdiamond13.png: PSNR = 31.86, SSIM = 0.7682\n",
      "Image baseballdiamond16.png: PSNR = 31.21, SSIM = 0.6663\n",
      "Image baseballdiamond24.png: PSNR = 32.61, SSIM = 0.7352\n",
      "Image baseballdiamond31.png: PSNR = 33.36, SSIM = 0.8627\n",
      "Image baseballdiamond32.png: PSNR = 37.08, SSIM = 0.9302\n",
      "Image baseballdiamond37.png: PSNR = 33.47, SSIM = 0.8613\n",
      "Image baseballdiamond40.png: PSNR = 33.20, SSIM = 0.8514\n",
      "Image baseballdiamond47.png: PSNR = 32.14, SSIM = 0.8045\n",
      "Image baseballdiamond50.png: PSNR = 32.80, SSIM = 0.8364\n",
      "Image baseballdiamond53.png: PSNR = 37.53, SSIM = 0.9369\n",
      "Image baseballdiamond58.png: PSNR = 34.72, SSIM = 0.9003\n",
      "Image baseballdiamond72.png: PSNR = 36.85, SSIM = 0.9087\n",
      "Image baseballdiamond74.png: PSNR = 36.93, SSIM = 0.9219\n",
      "Image baseballdiamond79.png: PSNR = 30.54, SSIM = 0.5993\n",
      "Image baseballdiamond81.png: PSNR = 33.89, SSIM = 0.8365\n",
      "Image baseballdiamond83.png: PSNR = 35.68, SSIM = 0.8511\n",
      "Image baseballdiamond96.png: PSNR = 34.71, SSIM = 0.9016\n",
      "Image beach02.png: PSNR = 31.97, SSIM = 0.7455\n",
      "Image beach11.png: PSNR = 37.96, SSIM = 0.9250\n",
      "Image beach13.png: PSNR = 39.94, SSIM = 0.9510\n",
      "Image beach16.png: PSNR = 42.53, SSIM = 0.9750\n",
      "Image beach19.png: PSNR = 36.31, SSIM = 0.9149\n",
      "Image beach26.png: PSNR = 38.82, SSIM = 0.9392\n",
      "Image beach46.png: PSNR = 34.00, SSIM = 0.8210\n",
      "Image beach50.png: PSNR = 36.45, SSIM = 0.9103\n",
      "Image beach54.png: PSNR = 37.07, SSIM = 0.9129\n",
      "Image beach60.png: PSNR = 34.27, SSIM = 0.8567\n",
      "Image beach72.png: PSNR = 34.43, SSIM = 0.8460\n",
      "Image beach73.png: PSNR = 32.00, SSIM = 0.6979\n",
      "Image beach76.png: PSNR = 38.28, SSIM = 0.9429\n",
      "Image beach85.png: PSNR = 37.39, SSIM = 0.9297\n",
      "Image beach86.png: PSNR = 37.78, SSIM = 0.9282\n",
      "Image beach88.png: PSNR = 37.66, SSIM = 0.9387\n",
      "Image beach89.png: PSNR = 38.54, SSIM = 0.9504\n",
      "Image beach94.png: PSNR = 33.51, SSIM = 0.8402\n",
      "Image beach97.png: PSNR = 33.52, SSIM = 0.8469\n",
      "Image beach99.png: PSNR = 33.64, SSIM = 0.8400\n",
      "Image buildings27.png: PSNR = 31.89, SSIM = 0.7700\n",
      "Image buildings32.png: PSNR = 31.41, SSIM = 0.8081\n",
      "Image buildings34.png: PSNR = 35.07, SSIM = 0.9122\n",
      "Image buildings35.png: PSNR = 32.66, SSIM = 0.8445\n",
      "Image buildings36.png: PSNR = 30.80, SSIM = 0.7831\n",
      "Image buildings44.png: PSNR = 30.50, SSIM = 0.7693\n",
      "Image buildings45.png: PSNR = 31.76, SSIM = 0.8373\n",
      "Image buildings46.png: PSNR = 30.89, SSIM = 0.7727\n",
      "Image buildings51.png: PSNR = 31.74, SSIM = 0.8367\n",
      "Image buildings52.png: PSNR = 37.41, SSIM = 0.9598\n",
      "Image buildings56.png: PSNR = 31.21, SSIM = 0.7806\n",
      "Image buildings63.png: PSNR = 32.05, SSIM = 0.8397\n",
      "Image buildings64.png: PSNR = 33.10, SSIM = 0.8950\n",
      "Image buildings65.png: PSNR = 35.56, SSIM = 0.9136\n",
      "Image buildings69.png: PSNR = 34.26, SSIM = 0.9189\n",
      "Image buildings73.png: PSNR = 33.28, SSIM = 0.8933\n",
      "Image buildings74.png: PSNR = 32.73, SSIM = 0.8619\n",
      "Image buildings79.png: PSNR = 29.93, SSIM = 0.6515\n",
      "Image buildings89.png: PSNR = 31.80, SSIM = 0.8325\n",
      "Image buildings93.png: PSNR = 31.29, SSIM = 0.7880\n",
      "Image chaparral09.png: PSNR = 30.25, SSIM = 0.7752\n",
      "Image chaparral15.png: PSNR = 31.23, SSIM = 0.8431\n",
      "Image chaparral17.png: PSNR = 32.64, SSIM = 0.8267\n",
      "Image chaparral23.png: PSNR = 30.20, SSIM = 0.7966\n",
      "Image chaparral26.png: PSNR = 30.16, SSIM = 0.7449\n",
      "Image chaparral33.png: PSNR = 31.24, SSIM = 0.8462\n",
      "Image chaparral37.png: PSNR = 30.85, SSIM = 0.8260\n",
      "Image chaparral42.png: PSNR = 29.33, SSIM = 0.5590\n",
      "Image chaparral43.png: PSNR = 30.63, SSIM = 0.7594\n",
      "Image chaparral50.png: PSNR = 30.07, SSIM = 0.7400\n",
      "Image chaparral55.png: PSNR = 30.12, SSIM = 0.7979\n",
      "Image chaparral61.png: PSNR = 28.23, SSIM = 0.2531\n",
      "Image chaparral63.png: PSNR = 28.19, SSIM = 0.2206\n",
      "Image chaparral64.png: PSNR = 28.14, SSIM = 0.2492\n",
      "Image chaparral68.png: PSNR = 30.76, SSIM = 0.8278\n",
      "Image chaparral71.png: PSNR = 30.30, SSIM = 0.7705\n",
      "Image chaparral80.png: PSNR = 29.88, SSIM = 0.6925\n",
      "Image chaparral83.png: PSNR = 29.60, SSIM = 0.6946\n",
      "Image chaparral88.png: PSNR = 31.52, SSIM = 0.8164\n",
      "Image chaparral99.png: PSNR = 29.66, SSIM = 0.7518\n",
      "Image denseresidential02.png: PSNR = 31.48, SSIM = 0.8687\n",
      "Image denseresidential12.png: PSNR = 31.62, SSIM = 0.8867\n",
      "Image denseresidential14.png: PSNR = 30.66, SSIM = 0.8091\n",
      "Image denseresidential15.png: PSNR = 30.55, SSIM = 0.8186\n",
      "Image denseresidential29.png: PSNR = 30.58, SSIM = 0.7823\n",
      "Image denseresidential31.png: PSNR = 31.05, SSIM = 0.8349\n",
      "Image denseresidential34.png: PSNR = 31.51, SSIM = 0.7688\n",
      "Image denseresidential38.png: PSNR = 30.60, SSIM = 0.7440\n",
      "Image denseresidential46.png: PSNR = 31.26, SSIM = 0.8177\n",
      "Image denseresidential53.png: PSNR = 30.99, SSIM = 0.7702\n",
      "Image denseresidential60.png: PSNR = 31.21, SSIM = 0.8344\n",
      "Image denseresidential64.png: PSNR = 31.30, SSIM = 0.8445\n",
      "Image denseresidential65.png: PSNR = 30.85, SSIM = 0.7870\n",
      "Image denseresidential68.png: PSNR = 30.90, SSIM = 0.7936\n",
      "Image denseresidential75.png: PSNR = 31.45, SSIM = 0.8217\n",
      "Image denseresidential88.png: PSNR = 31.82, SSIM = 0.7941\n",
      "Image denseresidential89.png: PSNR = 31.55, SSIM = 0.7748\n",
      "Image denseresidential91.png: PSNR = 32.16, SSIM = 0.8275\n",
      "Image denseresidential96.png: PSNR = 30.71, SSIM = 0.7640\n",
      "Image denseresidential97.png: PSNR = 30.89, SSIM = 0.7689\n",
      "Image forest08.png: PSNR = 30.10, SSIM = 0.6063\n",
      "Image forest09.png: PSNR = 29.85, SSIM = 0.5785\n",
      "Image forest10.png: PSNR = 32.52, SSIM = 0.7302\n",
      "Image forest11.png: PSNR = 31.39, SSIM = 0.6746\n",
      "Image forest12.png: PSNR = 31.18, SSIM = 0.6537\n",
      "Image forest19.png: PSNR = 28.94, SSIM = 0.4788\n",
      "Image forest20.png: PSNR = 28.68, SSIM = 0.4689\n",
      "Image forest29.png: PSNR = 30.21, SSIM = 0.6510\n",
      "Image forest34.png: PSNR = 30.45, SSIM = 0.6736\n",
      "Image forest39.png: PSNR = 31.06, SSIM = 0.7254\n",
      "Image forest45.png: PSNR = 31.37, SSIM = 0.7491\n",
      "Image forest53.png: PSNR = 31.17, SSIM = 0.7540\n",
      "Image forest56.png: PSNR = 30.35, SSIM = 0.7193\n",
      "Image forest62.png: PSNR = 31.30, SSIM = 0.8369\n",
      "Image forest69.png: PSNR = 29.87, SSIM = 0.6167\n",
      "Image forest73.png: PSNR = 29.49, SSIM = 0.5652\n",
      "Image forest74.png: PSNR = 29.98, SSIM = 0.5859\n",
      "Image forest80.png: PSNR = 30.90, SSIM = 0.6659\n",
      "Image forest84.png: PSNR = 29.71, SSIM = 0.5694\n",
      "Image forest93.png: PSNR = 29.51, SSIM = 0.5461\n",
      "Image freeway00.png: PSNR = 32.07, SSIM = 0.8801\n",
      "Image freeway03.png: PSNR = 32.20, SSIM = 0.8605\n",
      "Image freeway07.png: PSNR = 32.44, SSIM = 0.8956\n",
      "Image freeway09.png: PSNR = 33.67, SSIM = 0.9084\n",
      "Image freeway12.png: PSNR = 33.80, SSIM = 0.9012\n",
      "Image freeway25.png: PSNR = 31.79, SSIM = 0.7427\n",
      "Image freeway26.png: PSNR = 31.29, SSIM = 0.6916\n",
      "Image freeway44.png: PSNR = 30.68, SSIM = 0.6675\n",
      "Image freeway55.png: PSNR = 32.66, SSIM = 0.8653\n",
      "Image freeway64.png: PSNR = 31.85, SSIM = 0.8311\n",
      "Image freeway67.png: PSNR = 32.62, SSIM = 0.8636\n",
      "Image freeway71.png: PSNR = 33.47, SSIM = 0.8920\n",
      "Image freeway74.png: PSNR = 35.34, SSIM = 0.9167\n",
      "Image freeway75.png: PSNR = 35.21, SSIM = 0.9311\n",
      "Image freeway76.png: PSNR = 31.53, SSIM = 0.8343\n",
      "Image freeway77.png: PSNR = 33.40, SSIM = 0.8894\n",
      "Image freeway78.png: PSNR = 34.41, SSIM = 0.9037\n",
      "Image freeway87.png: PSNR = 29.27, SSIM = 0.5598\n",
      "Image freeway92.png: PSNR = 34.12, SSIM = 0.8791\n",
      "Image freeway93.png: PSNR = 30.68, SSIM = 0.6599\n",
      "Image golfcourse07.png: PSNR = 33.36, SSIM = 0.7974\n",
      "Image golfcourse08.png: PSNR = 32.74, SSIM = 0.7575\n",
      "Image golfcourse14.png: PSNR = 33.67, SSIM = 0.8138\n",
      "Image golfcourse17.png: PSNR = 34.88, SSIM = 0.8496\n",
      "Image golfcourse18.png: PSNR = 33.17, SSIM = 0.7951\n",
      "Image golfcourse19.png: PSNR = 31.79, SSIM = 0.7398\n",
      "Image golfcourse24.png: PSNR = 32.29, SSIM = 0.7848\n",
      "Image golfcourse27.png: PSNR = 31.86, SSIM = 0.6953\n",
      "Image golfcourse33.png: PSNR = 31.73, SSIM = 0.6772\n",
      "Image golfcourse35.png: PSNR = 32.13, SSIM = 0.7189\n",
      "Image golfcourse45.png: PSNR = 35.56, SSIM = 0.8782\n",
      "Image golfcourse50.png: PSNR = 33.59, SSIM = 0.8130\n",
      "Image golfcourse52.png: PSNR = 32.28, SSIM = 0.7609\n",
      "Image golfcourse73.png: PSNR = 36.13, SSIM = 0.9082\n",
      "Image golfcourse76.png: PSNR = 33.30, SSIM = 0.8326\n",
      "Image golfcourse77.png: PSNR = 33.88, SSIM = 0.8512\n",
      "Image golfcourse78.png: PSNR = 34.28, SSIM = 0.8680\n",
      "Image golfcourse81.png: PSNR = 32.84, SSIM = 0.7980\n",
      "Image golfcourse82.png: PSNR = 32.41, SSIM = 0.8043\n",
      "Image golfcourse85.png: PSNR = 32.35, SSIM = 0.7976\n",
      "Image harbor00.png: PSNR = 32.26, SSIM = 0.8676\n",
      "Image harbor05.png: PSNR = 30.78, SSIM = 0.7992\n",
      "Image harbor13.png: PSNR = 30.03, SSIM = 0.7794\n",
      "Image harbor14.png: PSNR = 30.22, SSIM = 0.7802\n",
      "Image harbor15.png: PSNR = 30.32, SSIM = 0.7790\n",
      "Image harbor19.png: PSNR = 31.04, SSIM = 0.8140\n",
      "Image harbor22.png: PSNR = 32.09, SSIM = 0.8916\n",
      "Image harbor24.png: PSNR = 31.25, SSIM = 0.8801\n",
      "Image harbor32.png: PSNR = 33.65, SSIM = 0.8822\n",
      "Image harbor33.png: PSNR = 33.26, SSIM = 0.8721\n",
      "Image harbor35.png: PSNR = 31.64, SSIM = 0.8294\n",
      "Image harbor49.png: PSNR = 31.21, SSIM = 0.8422\n",
      "Image harbor61.png: PSNR = 30.16, SSIM = 0.7786\n",
      "Image harbor65.png: PSNR = 30.54, SSIM = 0.7596\n",
      "Image harbor67.png: PSNR = 31.48, SSIM = 0.8741\n",
      "Image harbor68.png: PSNR = 32.13, SSIM = 0.8975\n",
      "Image harbor75.png: PSNR = 32.08, SSIM = 0.8504\n",
      "Image harbor81.png: PSNR = 32.64, SSIM = 0.8922\n",
      "Image harbor83.png: PSNR = 30.38, SSIM = 0.7889\n",
      "Image harbor88.png: PSNR = 30.99, SSIM = 0.8002\n",
      "Image intersection00.png: PSNR = 32.26, SSIM = 0.8705\n",
      "Image intersection10.png: PSNR = 31.84, SSIM = 0.8429\n",
      "Image intersection16.png: PSNR = 33.00, SSIM = 0.8059\n",
      "Image intersection19.png: PSNR = 31.64, SSIM = 0.8016\n",
      "Image intersection26.png: PSNR = 32.40, SSIM = 0.7773\n",
      "Image intersection28.png: PSNR = 31.62, SSIM = 0.7792\n",
      "Image intersection29.png: PSNR = 31.56, SSIM = 0.7618\n",
      "Image intersection30.png: PSNR = 31.08, SSIM = 0.7508\n",
      "Image intersection32.png: PSNR = 31.28, SSIM = 0.7631\n",
      "Image intersection40.png: PSNR = 31.22, SSIM = 0.7817\n",
      "Image intersection43.png: PSNR = 30.83, SSIM = 0.7699\n",
      "Image intersection44.png: PSNR = 32.13, SSIM = 0.8125\n",
      "Image intersection50.png: PSNR = 32.42, SSIM = 0.7896\n",
      "Image intersection52.png: PSNR = 32.19, SSIM = 0.7817\n",
      "Image intersection70.png: PSNR = 32.64, SSIM = 0.8709\n",
      "Image intersection76.png: PSNR = 35.03, SSIM = 0.9201\n",
      "Image intersection77.png: PSNR = 34.35, SSIM = 0.9002\n",
      "Image intersection87.png: PSNR = 32.35, SSIM = 0.7845\n",
      "Image intersection89.png: PSNR = 31.66, SSIM = 0.7485\n",
      "Image intersection99.png: PSNR = 31.64, SSIM = 0.7693\n",
      "Image mediumresidential15.png: PSNR = 30.31, SSIM = 0.6922\n",
      "Image mediumresidential19.png: PSNR = 31.40, SSIM = 0.7500\n",
      "Image mediumresidential34.png: PSNR = 31.07, SSIM = 0.8130\n",
      "Image mediumresidential40.png: PSNR = 30.84, SSIM = 0.7508\n",
      "Image mediumresidential44.png: PSNR = 30.79, SSIM = 0.7507\n",
      "Image mediumresidential49.png: PSNR = 30.78, SSIM = 0.7417\n",
      "Image mediumresidential52.png: PSNR = 31.31, SSIM = 0.7689\n",
      "Image mediumresidential53.png: PSNR = 31.02, SSIM = 0.7737\n",
      "Image mediumresidential73.png: PSNR = 29.35, SSIM = 0.6234\n",
      "Image mediumresidential76.png: PSNR = 33.90, SSIM = 0.9098\n",
      "Image mediumresidential77.png: PSNR = 34.50, SSIM = 0.9068\n",
      "Image mediumresidential78.png: PSNR = 34.97, SSIM = 0.9193\n",
      "Image mediumresidential79.png: PSNR = 34.93, SSIM = 0.9151\n",
      "Image mediumresidential80.png: PSNR = 34.58, SSIM = 0.8994\n",
      "Image mediumresidential81.png: PSNR = 30.09, SSIM = 0.7330\n",
      "Image mediumresidential83.png: PSNR = 30.60, SSIM = 0.7799\n",
      "Image mediumresidential86.png: PSNR = 30.69, SSIM = 0.7293\n",
      "Image mediumresidential89.png: PSNR = 33.86, SSIM = 0.8718\n",
      "Image mediumresidential93.png: PSNR = 32.77, SSIM = 0.8365\n",
      "Image mediumresidential97.png: PSNR = 31.12, SSIM = 0.7913\n",
      "Image mobilehomepark03.png: PSNR = 30.28, SSIM = 0.7291\n",
      "Image mobilehomepark04.png: PSNR = 30.86, SSIM = 0.7443\n",
      "Image mobilehomepark05.png: PSNR = 30.65, SSIM = 0.7757\n",
      "Image mobilehomepark16.png: PSNR = 30.81, SSIM = 0.7787\n",
      "Image mobilehomepark29.png: PSNR = 32.03, SSIM = 0.8677\n",
      "Image mobilehomepark48.png: PSNR = 31.44, SSIM = 0.8492\n",
      "Image mobilehomepark49.png: PSNR = 32.08, SSIM = 0.8766\n",
      "Image mobilehomepark50.png: PSNR = 31.71, SSIM = 0.8570\n",
      "Image mobilehomepark54.png: PSNR = 32.76, SSIM = 0.8890\n",
      "Image mobilehomepark57.png: PSNR = 32.38, SSIM = 0.8734\n",
      "Image mobilehomepark59.png: PSNR = 31.58, SSIM = 0.8509\n",
      "Image mobilehomepark61.png: PSNR = 32.81, SSIM = 0.9011\n",
      "Image mobilehomepark63.png: PSNR = 32.46, SSIM = 0.8857\n",
      "Image mobilehomepark64.png: PSNR = 32.17, SSIM = 0.8846\n",
      "Image mobilehomepark77.png: PSNR = 30.10, SSIM = 0.7031\n",
      "Image mobilehomepark80.png: PSNR = 29.26, SSIM = 0.6634\n",
      "Image mobilehomepark83.png: PSNR = 29.01, SSIM = 0.6168\n",
      "Image mobilehomepark84.png: PSNR = 28.76, SSIM = 0.5480\n",
      "Image mobilehomepark93.png: PSNR = 29.18, SSIM = 0.6625\n",
      "Image mobilehomepark95.png: PSNR = 28.83, SSIM = 0.5581\n",
      "Image overpass00.png: PSNR = 32.10, SSIM = 0.8438\n",
      "Image overpass09.png: PSNR = 31.56, SSIM = 0.8465\n",
      "Image overpass18.png: PSNR = 33.93, SSIM = 0.8863\n",
      "Image overpass19.png: PSNR = 32.88, SSIM = 0.8541\n",
      "Image overpass27.png: PSNR = 29.91, SSIM = 0.6189\n",
      "Image overpass40.png: PSNR = 31.11, SSIM = 0.7360\n",
      "Image overpass54.png: PSNR = 30.37, SSIM = 0.6970\n",
      "Image overpass56.png: PSNR = 33.17, SSIM = 0.8575\n",
      "Image overpass58.png: PSNR = 31.81, SSIM = 0.7971\n",
      "Image overpass63.png: PSNR = 31.26, SSIM = 0.7805\n",
      "Image overpass66.png: PSNR = 32.48, SSIM = 0.7815\n",
      "Image overpass72.png: PSNR = 30.30, SSIM = 0.6502\n",
      "Image overpass73.png: PSNR = 30.96, SSIM = 0.7211\n",
      "Image overpass76.png: PSNR = 31.19, SSIM = 0.7637\n",
      "Image overpass80.png: PSNR = 31.22, SSIM = 0.7145\n",
      "Image overpass85.png: PSNR = 30.52, SSIM = 0.6625\n",
      "Image overpass90.png: PSNR = 29.79, SSIM = 0.6225\n",
      "Image overpass91.png: PSNR = 30.87, SSIM = 0.7337\n",
      "Image overpass93.png: PSNR = 32.10, SSIM = 0.8213\n",
      "Image overpass95.png: PSNR = 31.95, SSIM = 0.8175\n",
      "Image parkinglot15.png: PSNR = 30.91, SSIM = 0.8427\n",
      "Image parkinglot18.png: PSNR = 31.71, SSIM = 0.8447\n",
      "Image parkinglot24.png: PSNR = 30.20, SSIM = 0.7396\n",
      "Image parkinglot40.png: PSNR = 30.45, SSIM = 0.7287\n",
      "Image parkinglot46.png: PSNR = 30.14, SSIM = 0.6927\n",
      "Image parkinglot52.png: PSNR = 31.12, SSIM = 0.7544\n",
      "Image parkinglot54.png: PSNR = 30.55, SSIM = 0.7573\n",
      "Image parkinglot61.png: PSNR = 30.77, SSIM = 0.7235\n",
      "Image parkinglot63.png: PSNR = 30.62, SSIM = 0.7730\n",
      "Image parkinglot64.png: PSNR = 30.64, SSIM = 0.7264\n",
      "Image parkinglot70.png: PSNR = 30.26, SSIM = 0.7413\n",
      "Image parkinglot71.png: PSNR = 30.30, SSIM = 0.7797\n",
      "Image parkinglot76.png: PSNR = 30.93, SSIM = 0.7745\n",
      "Image parkinglot82.png: PSNR = 31.46, SSIM = 0.8538\n",
      "Image parkinglot83.png: PSNR = 30.84, SSIM = 0.8297\n",
      "Image parkinglot93.png: PSNR = 30.36, SSIM = 0.6851\n",
      "Image parkinglot95.png: PSNR = 30.58, SSIM = 0.6762\n",
      "Image parkinglot96.png: PSNR = 30.35, SSIM = 0.6580\n",
      "Image parkinglot97.png: PSNR = 30.72, SSIM = 0.8259\n",
      "Image parkinglot99.png: PSNR = 31.47, SSIM = 0.8295\n",
      "Image river04.png: PSNR = 29.65, SSIM = 0.5696\n",
      "Image river11.png: PSNR = 29.88, SSIM = 0.5843\n",
      "Image river13.png: PSNR = 30.01, SSIM = 0.6364\n",
      "Image river16.png: PSNR = 30.66, SSIM = 0.6774\n",
      "Image river17.png: PSNR = 31.10, SSIM = 0.7034\n",
      "Image river23.png: PSNR = 30.35, SSIM = 0.6086\n",
      "Image river31.png: PSNR = 30.24, SSIM = 0.5596\n",
      "Image river33.png: PSNR = 29.47, SSIM = 0.5016\n",
      "Image river36.png: PSNR = 31.14, SSIM = 0.7537\n",
      "Image river45.png: PSNR = 30.83, SSIM = 0.7191\n",
      "Image river51.png: PSNR = 32.47, SSIM = 0.8165\n",
      "Image river66.png: PSNR = 29.14, SSIM = 0.5123\n",
      "Image river76.png: PSNR = 36.23, SSIM = 0.8906\n",
      "Image river80.png: PSNR = 32.10, SSIM = 0.7747\n",
      "Image river86.png: PSNR = 32.12, SSIM = 0.7679\n",
      "Image river89.png: PSNR = 32.53, SSIM = 0.7579\n",
      "Image river92.png: PSNR = 32.85, SSIM = 0.7841\n",
      "Image river93.png: PSNR = 31.59, SSIM = 0.7036\n",
      "Image river94.png: PSNR = 30.27, SSIM = 0.5865\n",
      "Image river99.png: PSNR = 35.03, SSIM = 0.8853\n",
      "Image runway04.png: PSNR = 33.63, SSIM = 0.8402\n",
      "Image runway07.png: PSNR = 33.28, SSIM = 0.7980\n",
      "Image runway08.png: PSNR = 33.00, SSIM = 0.7847\n",
      "Image runway11.png: PSNR = 33.45, SSIM = 0.8110\n",
      "Image runway12.png: PSNR = 33.45, SSIM = 0.7992\n",
      "Image runway16.png: PSNR = 33.87, SSIM = 0.8372\n",
      "Image runway31.png: PSNR = 34.41, SSIM = 0.8756\n",
      "Image runway39.png: PSNR = 33.88, SSIM = 0.8331\n",
      "Image runway41.png: PSNR = 32.47, SSIM = 0.8043\n",
      "Image runway42.png: PSNR = 32.51, SSIM = 0.7904\n",
      "Image runway43.png: PSNR = 32.82, SSIM = 0.8079\n",
      "Image runway56.png: PSNR = 33.03, SSIM = 0.8238\n",
      "Image runway66.png: PSNR = 32.27, SSIM = 0.7569\n",
      "Image runway67.png: PSNR = 31.13, SSIM = 0.6792\n",
      "Image runway72.png: PSNR = 35.25, SSIM = 0.8928\n",
      "Image runway74.png: PSNR = 34.52, SSIM = 0.8842\n",
      "Image runway76.png: PSNR = 35.13, SSIM = 0.8888\n",
      "Image runway82.png: PSNR = 33.50, SSIM = 0.8362\n",
      "Image runway83.png: PSNR = 33.31, SSIM = 0.8413\n",
      "Image runway95.png: PSNR = 35.20, SSIM = 0.8601\n",
      "Image sparseresidential00.png: PSNR = 30.63, SSIM = 0.6970\n",
      "Image sparseresidential01.png: PSNR = 31.06, SSIM = 0.7005\n",
      "Image sparseresidential04.png: PSNR = 30.48, SSIM = 0.6484\n",
      "Image sparseresidential07.png: PSNR = 29.55, SSIM = 0.5771\n",
      "Image sparseresidential09.png: PSNR = 29.47, SSIM = 0.5570\n",
      "Image sparseresidential11.png: PSNR = 29.74, SSIM = 0.6463\n",
      "Image sparseresidential23.png: PSNR = 30.18, SSIM = 0.6102\n",
      "Image sparseresidential28.png: PSNR = 30.76, SSIM = 0.6719\n",
      "Image sparseresidential33.png: PSNR = 30.55, SSIM = 0.6380\n",
      "Image sparseresidential41.png: PSNR = 30.41, SSIM = 0.6625\n",
      "Image sparseresidential45.png: PSNR = 37.09, SSIM = 0.9297\n",
      "Image sparseresidential64.png: PSNR = 30.69, SSIM = 0.7495\n",
      "Image sparseresidential67.png: PSNR = 30.61, SSIM = 0.7522\n",
      "Image sparseresidential70.png: PSNR = 31.37, SSIM = 0.7877\n",
      "Image sparseresidential71.png: PSNR = 30.45, SSIM = 0.7393\n",
      "Image sparseresidential72.png: PSNR = 31.13, SSIM = 0.7970\n",
      "Image sparseresidential81.png: PSNR = 32.56, SSIM = 0.8616\n",
      "Image sparseresidential82.png: PSNR = 32.76, SSIM = 0.8187\n",
      "Image sparseresidential92.png: PSNR = 30.81, SSIM = 0.7381\n",
      "Image sparseresidential95.png: PSNR = 31.85, SSIM = 0.8580\n",
      "Image storagetanks01.png: PSNR = 34.03, SSIM = 0.8824\n",
      "Image storagetanks02.png: PSNR = 33.74, SSIM = 0.8580\n",
      "Image storagetanks16.png: PSNR = 32.30, SSIM = 0.8547\n",
      "Image storagetanks24.png: PSNR = 32.13, SSIM = 0.7650\n",
      "Image storagetanks27.png: PSNR = 30.14, SSIM = 0.6705\n",
      "Image storagetanks29.png: PSNR = 29.99, SSIM = 0.6218\n",
      "Image storagetanks33.png: PSNR = 31.05, SSIM = 0.7016\n",
      "Image storagetanks36.png: PSNR = 30.64, SSIM = 0.6926\n",
      "Image storagetanks37.png: PSNR = 30.90, SSIM = 0.6949\n",
      "Image storagetanks41.png: PSNR = 29.93, SSIM = 0.6556\n",
      "Image storagetanks42.png: PSNR = 30.63, SSIM = 0.7769\n",
      "Image storagetanks43.png: PSNR = 30.74, SSIM = 0.7150\n",
      "Image storagetanks57.png: PSNR = 34.75, SSIM = 0.8580\n",
      "Image storagetanks67.png: PSNR = 36.24, SSIM = 0.9344\n",
      "Image storagetanks68.png: PSNR = 33.37, SSIM = 0.8937\n",
      "Image storagetanks69.png: PSNR = 33.90, SSIM = 0.8909\n",
      "Image storagetanks70.png: PSNR = 34.32, SSIM = 0.9061\n",
      "Image storagetanks87.png: PSNR = 36.97, SSIM = 0.9178\n",
      "Image storagetanks90.png: PSNR = 31.99, SSIM = 0.7897\n",
      "Image storagetanks91.png: PSNR = 31.24, SSIM = 0.7755\n",
      "Image tenniscourt05.png: PSNR = 31.14, SSIM = 0.7310\n",
      "Image tenniscourt13.png: PSNR = 30.70, SSIM = 0.6760\n",
      "Image tenniscourt18.png: PSNR = 33.44, SSIM = 0.8686\n",
      "Image tenniscourt19.png: PSNR = 32.93, SSIM = 0.8530\n",
      "Image tenniscourt23.png: PSNR = 35.37, SSIM = 0.9082\n",
      "Image tenniscourt24.png: PSNR = 32.90, SSIM = 0.8452\n",
      "Image tenniscourt25.png: PSNR = 32.03, SSIM = 0.8087\n",
      "Image tenniscourt26.png: PSNR = 32.01, SSIM = 0.8293\n",
      "Image tenniscourt27.png: PSNR = 32.17, SSIM = 0.8322\n",
      "Image tenniscourt37.png: PSNR = 31.42, SSIM = 0.7086\n",
      "Image tenniscourt38.png: PSNR = 31.27, SSIM = 0.6971\n",
      "Image tenniscourt44.png: PSNR = 31.45, SSIM = 0.7075\n",
      "Image tenniscourt52.png: PSNR = 33.56, SSIM = 0.8700\n",
      "Image tenniscourt60.png: PSNR = 34.41, SSIM = 0.8745\n",
      "Image tenniscourt63.png: PSNR = 33.48, SSIM = 0.8469\n",
      "Image tenniscourt81.png: PSNR = 36.73, SSIM = 0.9057\n",
      "Image tenniscourt85.png: PSNR = 34.05, SSIM = 0.8206\n",
      "Image tenniscourt88.png: PSNR = 33.48, SSIM = 0.8170\n",
      "Image tenniscourt93.png: PSNR = 33.52, SSIM = 0.8652\n",
      "Image tenniscourt95.png: PSNR = 33.90, SSIM = 0.8906\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "3cf9da53",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha=0.3\n",
      "Average PSNR: 32.05\n",
      "Average SSIM: 0.7690\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"alpha=0.3\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9099049e",
   "metadata": {},
   "source": [
    "# Interpolating with alpha =  0.4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "d628412f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interpolating with alpha =  0.4\n"
     ]
    }
   ],
   "source": [
    "#net_interp.py\n",
    "import sys\n",
    "import torch\n",
    "from collections import OrderedDict\n",
    "\n",
    "alpha =0.4\n",
    "\n",
    "net_PSNR_path = './models/RRDB_PSNR_x4.pth'\n",
    "net_ESRGAN_path = './models/RRDB_ESRGAN_x4.pth'\n",
    "net_interp_path = './models/interp_{:02d}.pth'.format(int(alpha*10))\n",
    "\n",
    "net_PSNR = torch.load(net_PSNR_path)\n",
    "net_ESRGAN = torch.load(net_ESRGAN_path)\n",
    "net_interp = OrderedDict()\n",
    "\n",
    "print('Interpolating with alpha = ', alpha)\n",
    "for k, v_PSNR in net_PSNR.items():\n",
    "    v_ESRGAN = net_ESRGAN[k]\n",
    "    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN\n",
    "\n",
    "torch.save(net_interp, net_interp_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "943b2b98",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/interp_04.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "#test.py\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/interp_04.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "a87d9b34",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.34, SSIM = 0.0931\n",
      "Image agricultural12.png: PSNR = 31.33, SSIM = 0.9044\n",
      "Image agricultural27.png: PSNR = 28.75, SSIM = 0.2545\n",
      "Image agricultural28.png: PSNR = 28.78, SSIM = 0.2423\n",
      "Image agricultural33.png: PSNR = 30.90, SSIM = 0.5051\n",
      "Image agricultural39.png: PSNR = 32.89, SSIM = 0.8317\n",
      "Image agricultural54.png: PSNR = 31.99, SSIM = 0.6997\n",
      "Image agricultural55.png: PSNR = 36.54, SSIM = 0.8672\n",
      "Image agricultural60.png: PSNR = 30.75, SSIM = 0.7582\n",
      "Image agricultural61.png: PSNR = 33.67, SSIM = 0.9595\n",
      "Image agricultural62.png: PSNR = 28.63, SSIM = 0.2058\n",
      "Image agricultural63.png: PSNR = 30.14, SSIM = 0.4338\n",
      "Image agricultural67.png: PSNR = 27.85, SSIM = 0.0976\n",
      "Image agricultural69.png: PSNR = 27.74, SSIM = 0.1029\n",
      "Image agricultural72.png: PSNR = 27.87, SSIM = 0.1064\n",
      "Image agricultural74.png: PSNR = 29.14, SSIM = 0.4362\n",
      "Image agricultural76.png: PSNR = 30.40, SSIM = 0.7358\n",
      "Image agricultural83.png: PSNR = 28.23, SSIM = 0.1839\n",
      "Image agricultural84.png: PSNR = 28.11, SSIM = 0.1259\n",
      "Image agricultural85.png: PSNR = 28.06, SSIM = 0.1101\n",
      "Image airplane04.png: PSNR = 33.56, SSIM = 0.8953\n",
      "Image airplane09.png: PSNR = 33.31, SSIM = 0.8904\n",
      "Image airplane17.png: PSNR = 32.09, SSIM = 0.8286\n",
      "Image airplane25.png: PSNR = 33.95, SSIM = 0.8633\n",
      "Image airplane28.png: PSNR = 31.62, SSIM = 0.7324\n",
      "Image airplane29.png: PSNR = 31.63, SSIM = 0.7568\n",
      "Image airplane30.png: PSNR = 31.62, SSIM = 0.7769\n",
      "Image airplane32.png: PSNR = 32.51, SSIM = 0.7830\n",
      "Image airplane40.png: PSNR = 32.57, SSIM = 0.8253\n",
      "Image airplane48.png: PSNR = 30.85, SSIM = 0.8093\n",
      "Image airplane55.png: PSNR = 31.71, SSIM = 0.8167\n",
      "Image airplane65.png: PSNR = 30.96, SSIM = 0.7839\n",
      "Image airplane71.png: PSNR = 31.34, SSIM = 0.7945\n",
      "Image airplane74.png: PSNR = 33.27, SSIM = 0.8733\n",
      "Image airplane75.png: PSNR = 33.52, SSIM = 0.8798\n",
      "Image airplane80.png: PSNR = 35.93, SSIM = 0.9269\n",
      "Image airplane81.png: PSNR = 33.15, SSIM = 0.8440\n",
      "Image airplane85.png: PSNR = 33.59, SSIM = 0.8614\n",
      "Image airplane86.png: PSNR = 32.38, SSIM = 0.7753\n",
      "Image airplane87.png: PSNR = 31.09, SSIM = 0.7849\n",
      "Image baseballdiamond03.png: PSNR = 34.34, SSIM = 0.8388\n",
      "Image baseballdiamond04.png: PSNR = 33.04, SSIM = 0.8044\n",
      "Image baseballdiamond05.png: PSNR = 32.43, SSIM = 0.7877\n",
      "Image baseballdiamond13.png: PSNR = 31.71, SSIM = 0.7655\n",
      "Image baseballdiamond16.png: PSNR = 31.15, SSIM = 0.6656\n",
      "Image baseballdiamond24.png: PSNR = 32.51, SSIM = 0.7347\n",
      "Image baseballdiamond31.png: PSNR = 33.21, SSIM = 0.8599\n",
      "Image baseballdiamond32.png: PSNR = 36.80, SSIM = 0.9294\n",
      "Image baseballdiamond37.png: PSNR = 33.35, SSIM = 0.8599\n",
      "Image baseballdiamond40.png: PSNR = 33.08, SSIM = 0.8500\n",
      "Image baseballdiamond47.png: PSNR = 32.01, SSIM = 0.8020\n",
      "Image baseballdiamond50.png: PSNR = 32.65, SSIM = 0.8344\n",
      "Image baseballdiamond53.png: PSNR = 37.22, SSIM = 0.9358\n",
      "Image baseballdiamond58.png: PSNR = 34.57, SSIM = 0.8987\n",
      "Image baseballdiamond72.png: PSNR = 36.58, SSIM = 0.9079\n",
      "Image baseballdiamond74.png: PSNR = 36.69, SSIM = 0.9211\n",
      "Image baseballdiamond79.png: PSNR = 30.49, SSIM = 0.5976\n",
      "Image baseballdiamond81.png: PSNR = 33.80, SSIM = 0.8356\n",
      "Image baseballdiamond83.png: PSNR = 35.55, SSIM = 0.8503\n",
      "Image baseballdiamond96.png: PSNR = 34.60, SSIM = 0.9003\n",
      "Image beach02.png: PSNR = 31.93, SSIM = 0.7440\n",
      "Image beach11.png: PSNR = 37.80, SSIM = 0.9244\n",
      "Image beach13.png: PSNR = 39.71, SSIM = 0.9503\n",
      "Image beach16.png: PSNR = 42.15, SSIM = 0.9747\n",
      "Image beach19.png: PSNR = 36.08, SSIM = 0.9138\n",
      "Image beach26.png: PSNR = 38.57, SSIM = 0.9387\n",
      "Image beach46.png: PSNR = 33.92, SSIM = 0.8199\n",
      "Image beach50.png: PSNR = 36.32, SSIM = 0.9096\n",
      "Image beach54.png: PSNR = 36.91, SSIM = 0.9118\n",
      "Image beach60.png: PSNR = 34.09, SSIM = 0.8555\n",
      "Image beach72.png: PSNR = 34.24, SSIM = 0.8444\n",
      "Image beach73.png: PSNR = 31.86, SSIM = 0.6889\n",
      "Image beach76.png: PSNR = 37.95, SSIM = 0.9419\n",
      "Image beach85.png: PSNR = 36.99, SSIM = 0.9284\n",
      "Image beach86.png: PSNR = 37.37, SSIM = 0.9270\n",
      "Image beach88.png: PSNR = 37.25, SSIM = 0.9375\n",
      "Image beach89.png: PSNR = 38.07, SSIM = 0.9496\n",
      "Image beach94.png: PSNR = 33.35, SSIM = 0.8391\n",
      "Image beach97.png: PSNR = 33.38, SSIM = 0.8455\n",
      "Image beach99.png: PSNR = 33.49, SSIM = 0.8388\n",
      "Image buildings27.png: PSNR = 31.80, SSIM = 0.7686\n",
      "Image buildings32.png: PSNR = 31.29, SSIM = 0.8031\n",
      "Image buildings34.png: PSNR = 34.93, SSIM = 0.9097\n",
      "Image buildings35.png: PSNR = 32.55, SSIM = 0.8429\n",
      "Image buildings36.png: PSNR = 30.70, SSIM = 0.7762\n",
      "Image buildings44.png: PSNR = 30.41, SSIM = 0.7607\n",
      "Image buildings45.png: PSNR = 31.67, SSIM = 0.8317\n",
      "Image buildings46.png: PSNR = 30.81, SSIM = 0.7683\n",
      "Image buildings51.png: PSNR = 31.64, SSIM = 0.8307\n",
      "Image buildings52.png: PSNR = 37.11, SSIM = 0.9589\n",
      "Image buildings56.png: PSNR = 31.10, SSIM = 0.7754\n",
      "Image buildings63.png: PSNR = 31.96, SSIM = 0.8361\n",
      "Image buildings64.png: PSNR = 32.92, SSIM = 0.8898\n",
      "Image buildings65.png: PSNR = 35.35, SSIM = 0.9106\n",
      "Image buildings69.png: PSNR = 34.12, SSIM = 0.9170\n",
      "Image buildings73.png: PSNR = 33.18, SSIM = 0.8913\n",
      "Image buildings74.png: PSNR = 32.64, SSIM = 0.8601\n",
      "Image buildings79.png: PSNR = 29.87, SSIM = 0.6495\n",
      "Image buildings89.png: PSNR = 31.68, SSIM = 0.8283\n",
      "Image buildings93.png: PSNR = 31.16, SSIM = 0.7818\n",
      "Image chaparral09.png: PSNR = 30.18, SSIM = 0.7723\n",
      "Image chaparral15.png: PSNR = 31.12, SSIM = 0.8412\n",
      "Image chaparral17.png: PSNR = 32.53, SSIM = 0.8255\n",
      "Image chaparral23.png: PSNR = 30.15, SSIM = 0.7936\n",
      "Image chaparral26.png: PSNR = 30.10, SSIM = 0.7422\n",
      "Image chaparral33.png: PSNR = 31.14, SSIM = 0.8435\n",
      "Image chaparral37.png: PSNR = 30.78, SSIM = 0.8241\n",
      "Image chaparral42.png: PSNR = 29.30, SSIM = 0.5574\n",
      "Image chaparral43.png: PSNR = 30.56, SSIM = 0.7574\n",
      "Image chaparral50.png: PSNR = 30.02, SSIM = 0.7376\n",
      "Image chaparral55.png: PSNR = 30.07, SSIM = 0.7945\n",
      "Image chaparral61.png: PSNR = 28.24, SSIM = 0.2515\n",
      "Image chaparral63.png: PSNR = 28.19, SSIM = 0.2188\n",
      "Image chaparral64.png: PSNR = 28.15, SSIM = 0.2458\n",
      "Image chaparral68.png: PSNR = 30.69, SSIM = 0.8258\n",
      "Image chaparral71.png: PSNR = 30.25, SSIM = 0.7680\n",
      "Image chaparral80.png: PSNR = 29.83, SSIM = 0.6900\n",
      "Image chaparral83.png: PSNR = 29.55, SSIM = 0.6912\n",
      "Image chaparral88.png: PSNR = 31.44, SSIM = 0.8148\n",
      "Image chaparral99.png: PSNR = 29.62, SSIM = 0.7498\n",
      "Image denseresidential02.png: PSNR = 31.37, SSIM = 0.8660\n",
      "Image denseresidential12.png: PSNR = 31.51, SSIM = 0.8849\n",
      "Image denseresidential14.png: PSNR = 30.54, SSIM = 0.8041\n",
      "Image denseresidential15.png: PSNR = 30.46, SSIM = 0.8139\n",
      "Image denseresidential29.png: PSNR = 30.44, SSIM = 0.7763\n",
      "Image denseresidential31.png: PSNR = 30.91, SSIM = 0.8293\n",
      "Image denseresidential34.png: PSNR = 31.42, SSIM = 0.7656\n",
      "Image denseresidential38.png: PSNR = 30.52, SSIM = 0.7412\n",
      "Image denseresidential46.png: PSNR = 31.19, SSIM = 0.8147\n",
      "Image denseresidential53.png: PSNR = 30.89, SSIM = 0.7640\n",
      "Image denseresidential60.png: PSNR = 31.06, SSIM = 0.8277\n",
      "Image denseresidential64.png: PSNR = 31.22, SSIM = 0.8418\n",
      "Image denseresidential65.png: PSNR = 30.77, SSIM = 0.7831\n",
      "Image denseresidential68.png: PSNR = 30.80, SSIM = 0.7874\n",
      "Image denseresidential75.png: PSNR = 31.34, SSIM = 0.8173\n",
      "Image denseresidential88.png: PSNR = 31.72, SSIM = 0.7911\n",
      "Image denseresidential89.png: PSNR = 31.46, SSIM = 0.7712\n",
      "Image denseresidential91.png: PSNR = 32.06, SSIM = 0.8244\n",
      "Image denseresidential96.png: PSNR = 30.63, SSIM = 0.7611\n",
      "Image denseresidential97.png: PSNR = 30.83, SSIM = 0.7677\n",
      "Image forest08.png: PSNR = 30.06, SSIM = 0.6058\n",
      "Image forest09.png: PSNR = 29.82, SSIM = 0.5788\n",
      "Image forest10.png: PSNR = 32.45, SSIM = 0.7298\n",
      "Image forest11.png: PSNR = 31.33, SSIM = 0.6739\n",
      "Image forest12.png: PSNR = 31.12, SSIM = 0.6524\n",
      "Image forest19.png: PSNR = 28.94, SSIM = 0.4752\n",
      "Image forest20.png: PSNR = 28.67, SSIM = 0.4663\n",
      "Image forest29.png: PSNR = 30.19, SSIM = 0.6510\n",
      "Image forest34.png: PSNR = 30.39, SSIM = 0.6693\n",
      "Image forest39.png: PSNR = 30.95, SSIM = 0.7196\n",
      "Image forest45.png: PSNR = 31.28, SSIM = 0.7468\n",
      "Image forest53.png: PSNR = 31.09, SSIM = 0.7506\n",
      "Image forest56.png: PSNR = 30.29, SSIM = 0.7161\n",
      "Image forest62.png: PSNR = 31.25, SSIM = 0.8352\n",
      "Image forest69.png: PSNR = 29.83, SSIM = 0.6131\n",
      "Image forest73.png: PSNR = 29.44, SSIM = 0.5612\n",
      "Image forest74.png: PSNR = 29.95, SSIM = 0.5857\n",
      "Image forest80.png: PSNR = 30.82, SSIM = 0.6609\n",
      "Image forest84.png: PSNR = 29.67, SSIM = 0.5682\n",
      "Image forest93.png: PSNR = 29.46, SSIM = 0.5419\n",
      "Image freeway00.png: PSNR = 31.94, SSIM = 0.8769\n",
      "Image freeway03.png: PSNR = 32.09, SSIM = 0.8582\n",
      "Image freeway07.png: PSNR = 32.31, SSIM = 0.8930\n",
      "Image freeway09.png: PSNR = 33.54, SSIM = 0.9073\n",
      "Image freeway12.png: PSNR = 33.66, SSIM = 0.8994\n",
      "Image freeway25.png: PSNR = 31.70, SSIM = 0.7406\n",
      "Image freeway26.png: PSNR = 31.22, SSIM = 0.6889\n",
      "Image freeway44.png: PSNR = 30.61, SSIM = 0.6616\n",
      "Image freeway55.png: PSNR = 32.48, SSIM = 0.8615\n",
      "Image freeway64.png: PSNR = 31.70, SSIM = 0.8263\n",
      "Image freeway67.png: PSNR = 32.46, SSIM = 0.8584\n",
      "Image freeway71.png: PSNR = 33.33, SSIM = 0.8898\n",
      "Image freeway74.png: PSNR = 35.08, SSIM = 0.9150\n",
      "Image freeway75.png: PSNR = 35.02, SSIM = 0.9291\n",
      "Image freeway76.png: PSNR = 31.39, SSIM = 0.8293\n",
      "Image freeway77.png: PSNR = 33.14, SSIM = 0.8843\n",
      "Image freeway78.png: PSNR = 34.24, SSIM = 0.9016\n",
      "Image freeway87.png: PSNR = 29.14, SSIM = 0.5369\n",
      "Image freeway92.png: PSNR = 33.93, SSIM = 0.8762\n",
      "Image freeway93.png: PSNR = 30.63, SSIM = 0.6571\n",
      "Image golfcourse07.png: PSNR = 33.27, SSIM = 0.7964\n",
      "Image golfcourse08.png: PSNR = 32.65, SSIM = 0.7562\n",
      "Image golfcourse14.png: PSNR = 33.60, SSIM = 0.8130\n",
      "Image golfcourse17.png: PSNR = 34.78, SSIM = 0.8482\n",
      "Image golfcourse18.png: PSNR = 33.08, SSIM = 0.7935\n",
      "Image golfcourse19.png: PSNR = 31.69, SSIM = 0.7383\n",
      "Image golfcourse24.png: PSNR = 32.17, SSIM = 0.7823\n",
      "Image golfcourse27.png: PSNR = 31.81, SSIM = 0.6948\n",
      "Image golfcourse33.png: PSNR = 31.67, SSIM = 0.6770\n",
      "Image golfcourse35.png: PSNR = 32.04, SSIM = 0.7184\n",
      "Image golfcourse45.png: PSNR = 35.40, SSIM = 0.8775\n",
      "Image golfcourse50.png: PSNR = 33.44, SSIM = 0.8122\n",
      "Image golfcourse52.png: PSNR = 32.16, SSIM = 0.7593\n",
      "Image golfcourse73.png: PSNR = 35.87, SSIM = 0.9072\n",
      "Image golfcourse76.png: PSNR = 33.16, SSIM = 0.8313\n",
      "Image golfcourse77.png: PSNR = 33.72, SSIM = 0.8495\n",
      "Image golfcourse78.png: PSNR = 34.10, SSIM = 0.8659\n",
      "Image golfcourse81.png: PSNR = 32.71, SSIM = 0.7950\n",
      "Image golfcourse82.png: PSNR = 32.30, SSIM = 0.8013\n",
      "Image golfcourse85.png: PSNR = 32.21, SSIM = 0.7938\n",
      "Image harbor00.png: PSNR = 32.18, SSIM = 0.8648\n",
      "Image harbor05.png: PSNR = 30.74, SSIM = 0.7964\n",
      "Image harbor13.png: PSNR = 29.97, SSIM = 0.7764\n",
      "Image harbor14.png: PSNR = 30.15, SSIM = 0.7758\n",
      "Image harbor15.png: PSNR = 30.26, SSIM = 0.7752\n",
      "Image harbor19.png: PSNR = 30.99, SSIM = 0.8115\n",
      "Image harbor22.png: PSNR = 32.01, SSIM = 0.8883\n",
      "Image harbor24.png: PSNR = 31.18, SSIM = 0.8763\n",
      "Image harbor32.png: PSNR = 33.53, SSIM = 0.8805\n",
      "Image harbor33.png: PSNR = 33.15, SSIM = 0.8707\n",
      "Image harbor35.png: PSNR = 31.58, SSIM = 0.8281\n",
      "Image harbor49.png: PSNR = 31.16, SSIM = 0.8387\n",
      "Image harbor61.png: PSNR = 30.09, SSIM = 0.7732\n",
      "Image harbor65.png: PSNR = 30.49, SSIM = 0.7566\n",
      "Image harbor67.png: PSNR = 31.42, SSIM = 0.8724\n",
      "Image harbor68.png: PSNR = 32.06, SSIM = 0.8960\n",
      "Image harbor75.png: PSNR = 32.03, SSIM = 0.8494\n",
      "Image harbor81.png: PSNR = 32.59, SSIM = 0.8901\n",
      "Image harbor83.png: PSNR = 30.34, SSIM = 0.7823\n",
      "Image harbor88.png: PSNR = 30.94, SSIM = 0.7907\n",
      "Image intersection00.png: PSNR = 32.14, SSIM = 0.8685\n",
      "Image intersection10.png: PSNR = 31.75, SSIM = 0.8412\n",
      "Image intersection16.png: PSNR = 32.90, SSIM = 0.8047\n",
      "Image intersection19.png: PSNR = 31.58, SSIM = 0.8000\n",
      "Image intersection26.png: PSNR = 32.30, SSIM = 0.7742\n",
      "Image intersection28.png: PSNR = 31.56, SSIM = 0.7774\n",
      "Image intersection29.png: PSNR = 31.48, SSIM = 0.7598\n",
      "Image intersection30.png: PSNR = 31.03, SSIM = 0.7487\n",
      "Image intersection32.png: PSNR = 31.22, SSIM = 0.7621\n",
      "Image intersection40.png: PSNR = 31.11, SSIM = 0.7771\n",
      "Image intersection43.png: PSNR = 30.71, SSIM = 0.7637\n",
      "Image intersection44.png: PSNR = 31.99, SSIM = 0.8081\n",
      "Image intersection50.png: PSNR = 32.35, SSIM = 0.7874\n",
      "Image intersection52.png: PSNR = 32.14, SSIM = 0.7801\n",
      "Image intersection70.png: PSNR = 32.55, SSIM = 0.8692\n",
      "Image intersection76.png: PSNR = 34.82, SSIM = 0.9189\n",
      "Image intersection77.png: PSNR = 34.19, SSIM = 0.8987\n",
      "Image intersection87.png: PSNR = 32.27, SSIM = 0.7828\n",
      "Image intersection89.png: PSNR = 31.59, SSIM = 0.7470\n",
      "Image intersection99.png: PSNR = 31.55, SSIM = 0.7647\n",
      "Image mediumresidential15.png: PSNR = 30.24, SSIM = 0.6884\n",
      "Image mediumresidential19.png: PSNR = 31.30, SSIM = 0.7473\n",
      "Image mediumresidential34.png: PSNR = 30.97, SSIM = 0.8094\n",
      "Image mediumresidential40.png: PSNR = 30.78, SSIM = 0.7476\n",
      "Image mediumresidential44.png: PSNR = 30.73, SSIM = 0.7481\n",
      "Image mediumresidential49.png: PSNR = 30.70, SSIM = 0.7364\n",
      "Image mediumresidential52.png: PSNR = 31.22, SSIM = 0.7639\n",
      "Image mediumresidential53.png: PSNR = 30.95, SSIM = 0.7713\n",
      "Image mediumresidential73.png: PSNR = 29.32, SSIM = 0.6183\n",
      "Image mediumresidential76.png: PSNR = 33.72, SSIM = 0.9079\n",
      "Image mediumresidential77.png: PSNR = 34.31, SSIM = 0.9048\n",
      "Image mediumresidential78.png: PSNR = 34.77, SSIM = 0.9179\n",
      "Image mediumresidential79.png: PSNR = 34.72, SSIM = 0.9134\n",
      "Image mediumresidential80.png: PSNR = 34.40, SSIM = 0.8976\n",
      "Image mediumresidential81.png: PSNR = 30.03, SSIM = 0.7291\n",
      "Image mediumresidential83.png: PSNR = 30.49, SSIM = 0.7729\n",
      "Image mediumresidential86.png: PSNR = 30.62, SSIM = 0.7241\n",
      "Image mediumresidential89.png: PSNR = 33.72, SSIM = 0.8699\n",
      "Image mediumresidential93.png: PSNR = 32.68, SSIM = 0.8351\n",
      "Image mediumresidential97.png: PSNR = 31.05, SSIM = 0.7877\n",
      "Image mobilehomepark03.png: PSNR = 30.22, SSIM = 0.7246\n",
      "Image mobilehomepark04.png: PSNR = 30.79, SSIM = 0.7431\n",
      "Image mobilehomepark05.png: PSNR = 30.63, SSIM = 0.7736\n",
      "Image mobilehomepark16.png: PSNR = 30.75, SSIM = 0.7761\n",
      "Image mobilehomepark29.png: PSNR = 31.92, SSIM = 0.8653\n",
      "Image mobilehomepark48.png: PSNR = 31.36, SSIM = 0.8467\n",
      "Image mobilehomepark49.png: PSNR = 32.00, SSIM = 0.8743\n",
      "Image mobilehomepark50.png: PSNR = 31.58, SSIM = 0.8535\n",
      "Image mobilehomepark54.png: PSNR = 32.65, SSIM = 0.8869\n",
      "Image mobilehomepark57.png: PSNR = 32.28, SSIM = 0.8710\n",
      "Image mobilehomepark59.png: PSNR = 31.46, SSIM = 0.8462\n",
      "Image mobilehomepark61.png: PSNR = 32.67, SSIM = 0.8990\n",
      "Image mobilehomepark63.png: PSNR = 32.34, SSIM = 0.8836\n",
      "Image mobilehomepark64.png: PSNR = 32.06, SSIM = 0.8816\n",
      "Image mobilehomepark77.png: PSNR = 30.07, SSIM = 0.7009\n",
      "Image mobilehomepark80.png: PSNR = 29.18, SSIM = 0.6517\n",
      "Image mobilehomepark83.png: PSNR = 28.98, SSIM = 0.6103\n",
      "Image mobilehomepark84.png: PSNR = 28.73, SSIM = 0.5424\n",
      "Image mobilehomepark93.png: PSNR = 29.11, SSIM = 0.6548\n",
      "Image mobilehomepark95.png: PSNR = 28.78, SSIM = 0.5494\n",
      "Image overpass00.png: PSNR = 31.95, SSIM = 0.8388\n",
      "Image overpass09.png: PSNR = 31.44, SSIM = 0.8431\n",
      "Image overpass18.png: PSNR = 33.67, SSIM = 0.8807\n",
      "Image overpass19.png: PSNR = 32.67, SSIM = 0.8485\n",
      "Image overpass27.png: PSNR = 29.83, SSIM = 0.6120\n",
      "Image overpass40.png: PSNR = 31.00, SSIM = 0.7303\n",
      "Image overpass54.png: PSNR = 30.26, SSIM = 0.6865\n",
      "Image overpass56.png: PSNR = 33.06, SSIM = 0.8553\n",
      "Image overpass58.png: PSNR = 31.71, SSIM = 0.7920\n",
      "Image overpass63.png: PSNR = 31.16, SSIM = 0.7758\n",
      "Image overpass66.png: PSNR = 32.41, SSIM = 0.7798\n",
      "Image overpass72.png: PSNR = 30.25, SSIM = 0.6459\n",
      "Image overpass73.png: PSNR = 30.88, SSIM = 0.7158\n",
      "Image overpass76.png: PSNR = 31.06, SSIM = 0.7540\n",
      "Image overpass80.png: PSNR = 31.15, SSIM = 0.7123\n",
      "Image overpass85.png: PSNR = 30.48, SSIM = 0.6600\n",
      "Image overpass90.png: PSNR = 29.75, SSIM = 0.6217\n",
      "Image overpass91.png: PSNR = 30.79, SSIM = 0.7285\n",
      "Image overpass93.png: PSNR = 31.98, SSIM = 0.8170\n",
      "Image overpass95.png: PSNR = 31.81, SSIM = 0.8113\n",
      "Image parkinglot15.png: PSNR = 30.78, SSIM = 0.8368\n",
      "Image parkinglot18.png: PSNR = 31.63, SSIM = 0.8438\n",
      "Image parkinglot24.png: PSNR = 30.16, SSIM = 0.7371\n",
      "Image parkinglot40.png: PSNR = 30.41, SSIM = 0.7269\n",
      "Image parkinglot46.png: PSNR = 30.11, SSIM = 0.6902\n",
      "Image parkinglot52.png: PSNR = 31.05, SSIM = 0.7512\n",
      "Image parkinglot54.png: PSNR = 30.49, SSIM = 0.7546\n",
      "Image parkinglot61.png: PSNR = 30.73, SSIM = 0.7217\n",
      "Image parkinglot63.png: PSNR = 30.59, SSIM = 0.7691\n",
      "Image parkinglot64.png: PSNR = 30.61, SSIM = 0.7250\n",
      "Image parkinglot70.png: PSNR = 30.24, SSIM = 0.7424\n",
      "Image parkinglot71.png: PSNR = 30.22, SSIM = 0.7721\n",
      "Image parkinglot76.png: PSNR = 30.82, SSIM = 0.7663\n",
      "Image parkinglot82.png: PSNR = 31.38, SSIM = 0.8499\n",
      "Image parkinglot83.png: PSNR = 30.77, SSIM = 0.8266\n",
      "Image parkinglot93.png: PSNR = 30.36, SSIM = 0.6782\n",
      "Image parkinglot95.png: PSNR = 30.54, SSIM = 0.6729\n",
      "Image parkinglot96.png: PSNR = 30.32, SSIM = 0.6551\n",
      "Image parkinglot97.png: PSNR = 30.66, SSIM = 0.8203\n",
      "Image parkinglot99.png: PSNR = 31.37, SSIM = 0.8250\n",
      "Image river04.png: PSNR = 29.62, SSIM = 0.5690\n",
      "Image river11.png: PSNR = 29.86, SSIM = 0.5829\n",
      "Image river13.png: PSNR = 29.98, SSIM = 0.6346\n",
      "Image river16.png: PSNR = 30.64, SSIM = 0.6768\n",
      "Image river17.png: PSNR = 31.06, SSIM = 0.7019\n",
      "Image river23.png: PSNR = 30.31, SSIM = 0.6069\n",
      "Image river31.png: PSNR = 30.21, SSIM = 0.5598\n",
      "Image river33.png: PSNR = 29.45, SSIM = 0.5018\n",
      "Image river36.png: PSNR = 31.07, SSIM = 0.7507\n",
      "Image river45.png: PSNR = 30.74, SSIM = 0.7157\n",
      "Image river51.png: PSNR = 32.35, SSIM = 0.8148\n",
      "Image river66.png: PSNR = 29.09, SSIM = 0.5069\n",
      "Image river76.png: PSNR = 36.09, SSIM = 0.8894\n",
      "Image river80.png: PSNR = 32.02, SSIM = 0.7728\n",
      "Image river86.png: PSNR = 32.06, SSIM = 0.7660\n",
      "Image river89.png: PSNR = 32.46, SSIM = 0.7561\n",
      "Image river92.png: PSNR = 32.79, SSIM = 0.7820\n",
      "Image river93.png: PSNR = 31.51, SSIM = 0.6999\n",
      "Image river94.png: PSNR = 30.21, SSIM = 0.5826\n",
      "Image river99.png: PSNR = 34.96, SSIM = 0.8836\n",
      "Image runway04.png: PSNR = 33.49, SSIM = 0.8387\n",
      "Image runway07.png: PSNR = 33.17, SSIM = 0.7968\n",
      "Image runway08.png: PSNR = 32.89, SSIM = 0.7835\n",
      "Image runway11.png: PSNR = 33.31, SSIM = 0.8094\n",
      "Image runway12.png: PSNR = 33.29, SSIM = 0.7977\n",
      "Image runway16.png: PSNR = 33.72, SSIM = 0.8358\n",
      "Image runway31.png: PSNR = 34.30, SSIM = 0.8741\n",
      "Image runway39.png: PSNR = 33.64, SSIM = 0.8257\n",
      "Image runway41.png: PSNR = 32.40, SSIM = 0.8027\n",
      "Image runway42.png: PSNR = 32.44, SSIM = 0.7889\n",
      "Image runway43.png: PSNR = 32.75, SSIM = 0.8068\n",
      "Image runway56.png: PSNR = 32.90, SSIM = 0.8216\n",
      "Image runway66.png: PSNR = 32.21, SSIM = 0.7561\n",
      "Image runway67.png: PSNR = 31.09, SSIM = 0.6778\n",
      "Image runway72.png: PSNR = 35.13, SSIM = 0.8912\n",
      "Image runway74.png: PSNR = 34.43, SSIM = 0.8822\n",
      "Image runway76.png: PSNR = 35.01, SSIM = 0.8866\n",
      "Image runway82.png: PSNR = 33.46, SSIM = 0.8353\n",
      "Image runway83.png: PSNR = 33.20, SSIM = 0.8385\n",
      "Image runway95.png: PSNR = 35.07, SSIM = 0.8594\n",
      "Image sparseresidential00.png: PSNR = 30.58, SSIM = 0.6956\n",
      "Image sparseresidential01.png: PSNR = 31.00, SSIM = 0.6998\n",
      "Image sparseresidential04.png: PSNR = 30.43, SSIM = 0.6465\n",
      "Image sparseresidential07.png: PSNR = 29.52, SSIM = 0.5767\n",
      "Image sparseresidential09.png: PSNR = 29.44, SSIM = 0.5572\n",
      "Image sparseresidential11.png: PSNR = 29.71, SSIM = 0.6445\n",
      "Image sparseresidential23.png: PSNR = 30.16, SSIM = 0.6087\n",
      "Image sparseresidential28.png: PSNR = 30.71, SSIM = 0.6712\n",
      "Image sparseresidential33.png: PSNR = 30.51, SSIM = 0.6371\n",
      "Image sparseresidential41.png: PSNR = 30.36, SSIM = 0.6620\n",
      "Image sparseresidential45.png: PSNR = 36.78, SSIM = 0.9289\n",
      "Image sparseresidential64.png: PSNR = 30.62, SSIM = 0.7456\n",
      "Image sparseresidential67.png: PSNR = 30.53, SSIM = 0.7475\n",
      "Image sparseresidential70.png: PSNR = 31.26, SSIM = 0.7832\n",
      "Image sparseresidential71.png: PSNR = 30.35, SSIM = 0.7325\n",
      "Image sparseresidential72.png: PSNR = 31.01, SSIM = 0.7915\n",
      "Image sparseresidential81.png: PSNR = 32.43, SSIM = 0.8596\n",
      "Image sparseresidential82.png: PSNR = 32.63, SSIM = 0.8169\n",
      "Image sparseresidential92.png: PSNR = 30.76, SSIM = 0.7370\n",
      "Image sparseresidential95.png: PSNR = 31.70, SSIM = 0.8557\n",
      "Image storagetanks01.png: PSNR = 33.89, SSIM = 0.8809\n",
      "Image storagetanks02.png: PSNR = 33.61, SSIM = 0.8551\n",
      "Image storagetanks16.png: PSNR = 32.19, SSIM = 0.8527\n",
      "Image storagetanks24.png: PSNR = 32.07, SSIM = 0.7637\n",
      "Image storagetanks27.png: PSNR = 30.04, SSIM = 0.6623\n",
      "Image storagetanks29.png: PSNR = 29.90, SSIM = 0.6119\n",
      "Image storagetanks33.png: PSNR = 30.95, SSIM = 0.6948\n",
      "Image storagetanks36.png: PSNR = 30.56, SSIM = 0.6869\n",
      "Image storagetanks37.png: PSNR = 30.80, SSIM = 0.6878\n",
      "Image storagetanks41.png: PSNR = 29.87, SSIM = 0.6473\n",
      "Image storagetanks42.png: PSNR = 30.51, SSIM = 0.7705\n",
      "Image storagetanks43.png: PSNR = 30.65, SSIM = 0.7103\n",
      "Image storagetanks57.png: PSNR = 34.57, SSIM = 0.8564\n",
      "Image storagetanks67.png: PSNR = 36.07, SSIM = 0.9336\n",
      "Image storagetanks68.png: PSNR = 33.26, SSIM = 0.8923\n",
      "Image storagetanks69.png: PSNR = 33.80, SSIM = 0.8897\n",
      "Image storagetanks70.png: PSNR = 34.19, SSIM = 0.9051\n",
      "Image storagetanks87.png: PSNR = 36.82, SSIM = 0.9169\n",
      "Image storagetanks90.png: PSNR = 31.91, SSIM = 0.7866\n",
      "Image storagetanks91.png: PSNR = 31.19, SSIM = 0.7739\n",
      "Image tenniscourt05.png: PSNR = 31.08, SSIM = 0.7268\n",
      "Image tenniscourt13.png: PSNR = 30.65, SSIM = 0.6717\n",
      "Image tenniscourt18.png: PSNR = 33.30, SSIM = 0.8661\n",
      "Image tenniscourt19.png: PSNR = 32.82, SSIM = 0.8504\n",
      "Image tenniscourt23.png: PSNR = 35.09, SSIM = 0.9052\n",
      "Image tenniscourt24.png: PSNR = 32.78, SSIM = 0.8414\n",
      "Image tenniscourt25.png: PSNR = 31.93, SSIM = 0.8036\n",
      "Image tenniscourt26.png: PSNR = 31.89, SSIM = 0.8236\n",
      "Image tenniscourt27.png: PSNR = 32.05, SSIM = 0.8284\n",
      "Image tenniscourt37.png: PSNR = 31.34, SSIM = 0.7042\n",
      "Image tenniscourt38.png: PSNR = 31.18, SSIM = 0.6936\n",
      "Image tenniscourt44.png: PSNR = 31.38, SSIM = 0.7042\n",
      "Image tenniscourt52.png: PSNR = 33.39, SSIM = 0.8670\n",
      "Image tenniscourt60.png: PSNR = 34.25, SSIM = 0.8727\n",
      "Image tenniscourt63.png: PSNR = 33.36, SSIM = 0.8441\n",
      "Image tenniscourt81.png: PSNR = 36.48, SSIM = 0.9047\n",
      "Image tenniscourt85.png: PSNR = 33.89, SSIM = 0.8176\n",
      "Image tenniscourt88.png: PSNR = 33.37, SSIM = 0.8151\n",
      "Image tenniscourt93.png: PSNR = 33.39, SSIM = 0.8622\n",
      "Image tenniscourt95.png: PSNR = 33.74, SSIM = 0.8878\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "0b1375a8",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha=0.4\n",
      "Average PSNR: 31.95\n",
      "Average SSIM: 0.7663\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"alpha=0.4\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7315d9b7",
   "metadata": {},
   "source": [
    "# Interpolating with alpha =  0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "efa1b26a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interpolating with alpha =  0.5\n"
     ]
    }
   ],
   "source": [
    "#net_interp.py\n",
    "import sys\n",
    "import torch\n",
    "from collections import OrderedDict\n",
    "\n",
    "alpha =0.5\n",
    "\n",
    "net_PSNR_path = './models/RRDB_PSNR_x4.pth'\n",
    "net_ESRGAN_path = './models/RRDB_ESRGAN_x4.pth'\n",
    "net_interp_path = './models/interp_{:02d}.pth'.format(int(alpha*10))\n",
    "\n",
    "net_PSNR = torch.load(net_PSNR_path)\n",
    "net_ESRGAN = torch.load(net_ESRGAN_path)\n",
    "net_interp = OrderedDict()\n",
    "\n",
    "print('Interpolating with alpha = ', alpha)\n",
    "for k, v_PSNR in net_PSNR.items():\n",
    "    v_ESRGAN = net_ESRGAN[k]\n",
    "    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN\n",
    "\n",
    "torch.save(net_interp, net_interp_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "025398b5",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/interp_05.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "#test.py\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/interp_05.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "cde23674",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.34, SSIM = 0.0931\n",
      "Image agricultural12.png: PSNR = 31.32, SSIM = 0.9115\n",
      "Image agricultural27.png: PSNR = 28.76, SSIM = 0.2515\n",
      "Image agricultural28.png: PSNR = 28.78, SSIM = 0.2405\n",
      "Image agricultural33.png: PSNR = 30.86, SSIM = 0.5005\n",
      "Image agricultural39.png: PSNR = 32.70, SSIM = 0.8251\n",
      "Image agricultural54.png: PSNR = 31.93, SSIM = 0.6975\n",
      "Image agricultural55.png: PSNR = 36.45, SSIM = 0.8654\n",
      "Image agricultural60.png: PSNR = 30.71, SSIM = 0.7562\n",
      "Image agricultural61.png: PSNR = 33.57, SSIM = 0.9576\n",
      "Image agricultural62.png: PSNR = 28.62, SSIM = 0.2065\n",
      "Image agricultural63.png: PSNR = 30.16, SSIM = 0.4391\n",
      "Image agricultural67.png: PSNR = 27.84, SSIM = 0.1003\n",
      "Image agricultural69.png: PSNR = 27.76, SSIM = 0.1095\n",
      "Image agricultural72.png: PSNR = 27.88, SSIM = 0.1102\n",
      "Image agricultural74.png: PSNR = 29.14, SSIM = 0.4324\n",
      "Image agricultural76.png: PSNR = 30.33, SSIM = 0.7326\n",
      "Image agricultural83.png: PSNR = 28.24, SSIM = 0.1851\n",
      "Image agricultural84.png: PSNR = 28.12, SSIM = 0.1283\n",
      "Image agricultural85.png: PSNR = 28.06, SSIM = 0.1127\n",
      "Image airplane04.png: PSNR = 33.46, SSIM = 0.8927\n",
      "Image airplane09.png: PSNR = 33.24, SSIM = 0.8885\n",
      "Image airplane17.png: PSNR = 31.99, SSIM = 0.8254\n",
      "Image airplane25.png: PSNR = 33.92, SSIM = 0.8618\n",
      "Image airplane28.png: PSNR = 31.57, SSIM = 0.7296\n",
      "Image airplane29.png: PSNR = 31.59, SSIM = 0.7550\n",
      "Image airplane30.png: PSNR = 31.59, SSIM = 0.7749\n",
      "Image airplane32.png: PSNR = 32.46, SSIM = 0.7805\n",
      "Image airplane40.png: PSNR = 32.43, SSIM = 0.8200\n",
      "Image airplane48.png: PSNR = 30.77, SSIM = 0.8051\n",
      "Image airplane55.png: PSNR = 31.60, SSIM = 0.8123\n",
      "Image airplane65.png: PSNR = 30.88, SSIM = 0.7778\n",
      "Image airplane71.png: PSNR = 31.21, SSIM = 0.7875\n",
      "Image airplane74.png: PSNR = 33.22, SSIM = 0.8713\n",
      "Image airplane75.png: PSNR = 33.42, SSIM = 0.8772\n",
      "Image airplane80.png: PSNR = 35.90, SSIM = 0.9257\n",
      "Image airplane81.png: PSNR = 33.11, SSIM = 0.8418\n",
      "Image airplane85.png: PSNR = 33.55, SSIM = 0.8584\n",
      "Image airplane86.png: PSNR = 32.33, SSIM = 0.7729\n",
      "Image airplane87.png: PSNR = 31.06, SSIM = 0.7826\n",
      "Image baseballdiamond03.png: PSNR = 34.14, SSIM = 0.8334\n",
      "Image baseballdiamond04.png: PSNR = 32.90, SSIM = 0.8003\n",
      "Image baseballdiamond05.png: PSNR = 32.32, SSIM = 0.7834\n",
      "Image baseballdiamond13.png: PSNR = 31.59, SSIM = 0.7603\n",
      "Image baseballdiamond16.png: PSNR = 31.12, SSIM = 0.6639\n",
      "Image baseballdiamond24.png: PSNR = 32.45, SSIM = 0.7329\n",
      "Image baseballdiamond31.png: PSNR = 33.10, SSIM = 0.8561\n",
      "Image baseballdiamond32.png: PSNR = 36.64, SSIM = 0.9281\n",
      "Image baseballdiamond37.png: PSNR = 33.25, SSIM = 0.8572\n",
      "Image baseballdiamond40.png: PSNR = 33.00, SSIM = 0.8471\n",
      "Image baseballdiamond47.png: PSNR = 31.92, SSIM = 0.7978\n",
      "Image baseballdiamond50.png: PSNR = 32.55, SSIM = 0.8307\n",
      "Image baseballdiamond53.png: PSNR = 37.04, SSIM = 0.9339\n",
      "Image baseballdiamond58.png: PSNR = 34.45, SSIM = 0.8964\n",
      "Image baseballdiamond72.png: PSNR = 36.41, SSIM = 0.9062\n",
      "Image baseballdiamond74.png: PSNR = 36.53, SSIM = 0.9194\n",
      "Image baseballdiamond79.png: PSNR = 30.43, SSIM = 0.5938\n",
      "Image baseballdiamond81.png: PSNR = 33.71, SSIM = 0.8338\n",
      "Image baseballdiamond83.png: PSNR = 35.46, SSIM = 0.8491\n",
      "Image baseballdiamond96.png: PSNR = 34.53, SSIM = 0.8985\n",
      "Image beach02.png: PSNR = 31.87, SSIM = 0.7383\n",
      "Image beach11.png: PSNR = 37.75, SSIM = 0.9232\n",
      "Image beach13.png: PSNR = 39.66, SSIM = 0.9492\n",
      "Image beach16.png: PSNR = 42.24, SSIM = 0.9744\n",
      "Image beach19.png: PSNR = 35.96, SSIM = 0.9122\n",
      "Image beach26.png: PSNR = 38.49, SSIM = 0.9377\n",
      "Image beach46.png: PSNR = 33.87, SSIM = 0.8176\n",
      "Image beach50.png: PSNR = 36.28, SSIM = 0.9084\n",
      "Image beach54.png: PSNR = 36.80, SSIM = 0.9097\n",
      "Image beach60.png: PSNR = 33.98, SSIM = 0.8524\n",
      "Image beach72.png: PSNR = 34.14, SSIM = 0.8412\n",
      "Image beach73.png: PSNR = 31.76, SSIM = 0.6780\n",
      "Image beach76.png: PSNR = 37.82, SSIM = 0.9404\n",
      "Image beach85.png: PSNR = 36.79, SSIM = 0.9254\n",
      "Image beach86.png: PSNR = 37.20, SSIM = 0.9250\n",
      "Image beach88.png: PSNR = 37.10, SSIM = 0.9357\n",
      "Image beach89.png: PSNR = 37.94, SSIM = 0.9481\n",
      "Image beach94.png: PSNR = 33.25, SSIM = 0.8365\n",
      "Image beach97.png: PSNR = 33.26, SSIM = 0.8426\n",
      "Image beach99.png: PSNR = 33.37, SSIM = 0.8357\n",
      "Image buildings27.png: PSNR = 31.75, SSIM = 0.7661\n",
      "Image buildings32.png: PSNR = 31.14, SSIM = 0.7939\n",
      "Image buildings34.png: PSNR = 34.81, SSIM = 0.9063\n",
      "Image buildings35.png: PSNR = 32.47, SSIM = 0.8404\n",
      "Image buildings36.png: PSNR = 30.62, SSIM = 0.7663\n",
      "Image buildings44.png: PSNR = 30.30, SSIM = 0.7493\n",
      "Image buildings45.png: PSNR = 31.62, SSIM = 0.8251\n",
      "Image buildings46.png: PSNR = 30.72, SSIM = 0.7611\n",
      "Image buildings51.png: PSNR = 31.54, SSIM = 0.8232\n",
      "Image buildings52.png: PSNR = 36.97, SSIM = 0.9578\n",
      "Image buildings56.png: PSNR = 31.00, SSIM = 0.7671\n",
      "Image buildings63.png: PSNR = 31.87, SSIM = 0.8314\n",
      "Image buildings64.png: PSNR = 32.76, SSIM = 0.8831\n",
      "Image buildings65.png: PSNR = 35.11, SSIM = 0.9064\n",
      "Image buildings69.png: PSNR = 34.03, SSIM = 0.9145\n",
      "Image buildings73.png: PSNR = 33.11, SSIM = 0.8888\n",
      "Image buildings74.png: PSNR = 32.56, SSIM = 0.8571\n",
      "Image buildings79.png: PSNR = 29.84, SSIM = 0.6454\n",
      "Image buildings89.png: PSNR = 31.61, SSIM = 0.8224\n",
      "Image buildings93.png: PSNR = 31.06, SSIM = 0.7723\n",
      "Image chaparral09.png: PSNR = 30.13, SSIM = 0.7682\n",
      "Image chaparral15.png: PSNR = 31.05, SSIM = 0.8376\n",
      "Image chaparral17.png: PSNR = 32.43, SSIM = 0.8231\n",
      "Image chaparral23.png: PSNR = 30.10, SSIM = 0.7896\n",
      "Image chaparral26.png: PSNR = 30.06, SSIM = 0.7379\n",
      "Image chaparral33.png: PSNR = 31.07, SSIM = 0.8395\n",
      "Image chaparral37.png: PSNR = 30.73, SSIM = 0.8213\n",
      "Image chaparral42.png: PSNR = 29.28, SSIM = 0.5534\n",
      "Image chaparral43.png: PSNR = 30.52, SSIM = 0.7545\n",
      "Image chaparral50.png: PSNR = 29.98, SSIM = 0.7340\n",
      "Image chaparral55.png: PSNR = 30.04, SSIM = 0.7895\n",
      "Image chaparral61.png: PSNR = 28.22, SSIM = 0.2479\n",
      "Image chaparral63.png: PSNR = 28.18, SSIM = 0.2147\n",
      "Image chaparral64.png: PSNR = 28.12, SSIM = 0.2400\n",
      "Image chaparral68.png: PSNR = 30.64, SSIM = 0.8226\n",
      "Image chaparral71.png: PSNR = 30.21, SSIM = 0.7639\n",
      "Image chaparral80.png: PSNR = 29.79, SSIM = 0.6864\n",
      "Image chaparral83.png: PSNR = 29.50, SSIM = 0.6868\n",
      "Image chaparral88.png: PSNR = 31.39, SSIM = 0.8123\n",
      "Image chaparral99.png: PSNR = 29.58, SSIM = 0.7466\n",
      "Image denseresidential02.png: PSNR = 31.29, SSIM = 0.8623\n",
      "Image denseresidential12.png: PSNR = 31.42, SSIM = 0.8825\n",
      "Image denseresidential14.png: PSNR = 30.42, SSIM = 0.7956\n",
      "Image denseresidential15.png: PSNR = 30.36, SSIM = 0.8061\n",
      "Image denseresidential29.png: PSNR = 30.33, SSIM = 0.7657\n",
      "Image denseresidential31.png: PSNR = 30.80, SSIM = 0.8209\n",
      "Image denseresidential34.png: PSNR = 31.36, SSIM = 0.7614\n",
      "Image denseresidential38.png: PSNR = 30.47, SSIM = 0.7373\n",
      "Image denseresidential46.png: PSNR = 31.13, SSIM = 0.8107\n",
      "Image denseresidential53.png: PSNR = 30.78, SSIM = 0.7541\n",
      "Image denseresidential60.png: PSNR = 30.89, SSIM = 0.8171\n",
      "Image denseresidential64.png: PSNR = 31.13, SSIM = 0.8378\n",
      "Image denseresidential65.png: PSNR = 30.68, SSIM = 0.7760\n",
      "Image denseresidential68.png: PSNR = 30.70, SSIM = 0.7781\n",
      "Image denseresidential75.png: PSNR = 31.28, SSIM = 0.8118\n",
      "Image denseresidential88.png: PSNR = 31.67, SSIM = 0.7867\n",
      "Image denseresidential89.png: PSNR = 31.39, SSIM = 0.7663\n",
      "Image denseresidential91.png: PSNR = 31.99, SSIM = 0.8199\n",
      "Image denseresidential96.png: PSNR = 30.59, SSIM = 0.7568\n",
      "Image denseresidential97.png: PSNR = 30.79, SSIM = 0.7655\n",
      "Image forest08.png: PSNR = 30.02, SSIM = 0.6027\n",
      "Image forest09.png: PSNR = 29.78, SSIM = 0.5769\n",
      "Image forest10.png: PSNR = 32.39, SSIM = 0.7283\n",
      "Image forest11.png: PSNR = 31.28, SSIM = 0.6715\n",
      "Image forest12.png: PSNR = 31.07, SSIM = 0.6496\n",
      "Image forest19.png: PSNR = 28.92, SSIM = 0.4690\n",
      "Image forest20.png: PSNR = 28.65, SSIM = 0.4601\n",
      "Image forest29.png: PSNR = 30.17, SSIM = 0.6493\n",
      "Image forest34.png: PSNR = 30.31, SSIM = 0.6604\n",
      "Image forest39.png: PSNR = 30.80, SSIM = 0.7062\n",
      "Image forest45.png: PSNR = 31.19, SSIM = 0.7419\n",
      "Image forest53.png: PSNR = 31.01, SSIM = 0.7451\n",
      "Image forest56.png: PSNR = 30.22, SSIM = 0.7097\n",
      "Image forest62.png: PSNR = 31.19, SSIM = 0.8322\n",
      "Image forest69.png: PSNR = 29.76, SSIM = 0.6062\n",
      "Image forest73.png: PSNR = 29.38, SSIM = 0.5521\n",
      "Image forest74.png: PSNR = 29.93, SSIM = 0.5827\n",
      "Image forest80.png: PSNR = 30.72, SSIM = 0.6508\n",
      "Image forest84.png: PSNR = 29.62, SSIM = 0.5616\n",
      "Image forest93.png: PSNR = 29.40, SSIM = 0.5316\n",
      "Image freeway00.png: PSNR = 31.84, SSIM = 0.8729\n",
      "Image freeway03.png: PSNR = 31.99, SSIM = 0.8545\n",
      "Image freeway07.png: PSNR = 32.21, SSIM = 0.8900\n",
      "Image freeway09.png: PSNR = 33.47, SSIM = 0.9057\n",
      "Image freeway12.png: PSNR = 33.55, SSIM = 0.8968\n",
      "Image freeway25.png: PSNR = 31.63, SSIM = 0.7370\n",
      "Image freeway26.png: PSNR = 31.17, SSIM = 0.6848\n",
      "Image freeway44.png: PSNR = 30.54, SSIM = 0.6537\n",
      "Image freeway55.png: PSNR = 32.33, SSIM = 0.8556\n",
      "Image freeway64.png: PSNR = 31.58, SSIM = 0.8205\n",
      "Image freeway67.png: PSNR = 32.30, SSIM = 0.8518\n",
      "Image freeway71.png: PSNR = 33.25, SSIM = 0.8865\n",
      "Image freeway74.png: PSNR = 34.92, SSIM = 0.9121\n",
      "Image freeway75.png: PSNR = 34.86, SSIM = 0.9264\n",
      "Image freeway76.png: PSNR = 31.28, SSIM = 0.8225\n",
      "Image freeway77.png: PSNR = 32.92, SSIM = 0.8780\n",
      "Image freeway78.png: PSNR = 34.08, SSIM = 0.8982\n",
      "Image freeway87.png: PSNR = 28.97, SSIM = 0.5049\n",
      "Image freeway92.png: PSNR = 33.77, SSIM = 0.8718\n",
      "Image freeway93.png: PSNR = 30.61, SSIM = 0.6534\n",
      "Image golfcourse07.png: PSNR = 33.22, SSIM = 0.7942\n",
      "Image golfcourse08.png: PSNR = 32.60, SSIM = 0.7533\n",
      "Image golfcourse14.png: PSNR = 33.54, SSIM = 0.8109\n",
      "Image golfcourse17.png: PSNR = 34.71, SSIM = 0.8458\n",
      "Image golfcourse18.png: PSNR = 33.02, SSIM = 0.7903\n",
      "Image golfcourse19.png: PSNR = 31.60, SSIM = 0.7345\n",
      "Image golfcourse24.png: PSNR = 32.08, SSIM = 0.7781\n",
      "Image golfcourse27.png: PSNR = 31.76, SSIM = 0.6929\n",
      "Image golfcourse33.png: PSNR = 31.64, SSIM = 0.6749\n",
      "Image golfcourse35.png: PSNR = 32.00, SSIM = 0.7163\n",
      "Image golfcourse45.png: PSNR = 35.34, SSIM = 0.8762\n",
      "Image golfcourse50.png: PSNR = 33.38, SSIM = 0.8103\n",
      "Image golfcourse52.png: PSNR = 32.09, SSIM = 0.7564\n",
      "Image golfcourse73.png: PSNR = 35.76, SSIM = 0.9054\n",
      "Image golfcourse76.png: PSNR = 33.05, SSIM = 0.8286\n",
      "Image golfcourse77.png: PSNR = 33.62, SSIM = 0.8461\n",
      "Image golfcourse78.png: PSNR = 33.96, SSIM = 0.8624\n",
      "Image golfcourse81.png: PSNR = 32.59, SSIM = 0.7896\n",
      "Image golfcourse82.png: PSNR = 32.20, SSIM = 0.7964\n",
      "Image golfcourse85.png: PSNR = 32.08, SSIM = 0.7878\n",
      "Image harbor00.png: PSNR = 32.09, SSIM = 0.8616\n",
      "Image harbor05.png: PSNR = 30.68, SSIM = 0.7921\n",
      "Image harbor13.png: PSNR = 29.91, SSIM = 0.7708\n",
      "Image harbor14.png: PSNR = 30.08, SSIM = 0.7688\n",
      "Image harbor15.png: PSNR = 30.19, SSIM = 0.7691\n",
      "Image harbor19.png: PSNR = 30.92, SSIM = 0.8078\n",
      "Image harbor22.png: PSNR = 31.94, SSIM = 0.8847\n",
      "Image harbor24.png: PSNR = 31.12, SSIM = 0.8714\n",
      "Image harbor32.png: PSNR = 33.41, SSIM = 0.8782\n",
      "Image harbor33.png: PSNR = 33.06, SSIM = 0.8683\n",
      "Image harbor35.png: PSNR = 31.52, SSIM = 0.8261\n",
      "Image harbor49.png: PSNR = 31.12, SSIM = 0.8339\n",
      "Image harbor61.png: PSNR = 30.07, SSIM = 0.7674\n",
      "Image harbor65.png: PSNR = 30.48, SSIM = 0.7534\n",
      "Image harbor67.png: PSNR = 31.41, SSIM = 0.8704\n",
      "Image harbor68.png: PSNR = 32.01, SSIM = 0.8941\n",
      "Image harbor75.png: PSNR = 32.00, SSIM = 0.8478\n",
      "Image harbor81.png: PSNR = 32.52, SSIM = 0.8875\n",
      "Image harbor83.png: PSNR = 30.29, SSIM = 0.7743\n",
      "Image harbor88.png: PSNR = 30.88, SSIM = 0.7811\n",
      "Image intersection00.png: PSNR = 32.03, SSIM = 0.8654\n",
      "Image intersection10.png: PSNR = 31.66, SSIM = 0.8384\n",
      "Image intersection16.png: PSNR = 32.82, SSIM = 0.8021\n",
      "Image intersection19.png: PSNR = 31.53, SSIM = 0.7977\n",
      "Image intersection26.png: PSNR = 32.23, SSIM = 0.7699\n",
      "Image intersection28.png: PSNR = 31.52, SSIM = 0.7752\n",
      "Image intersection29.png: PSNR = 31.45, SSIM = 0.7566\n",
      "Image intersection30.png: PSNR = 30.98, SSIM = 0.7461\n",
      "Image intersection32.png: PSNR = 31.21, SSIM = 0.7602\n",
      "Image intersection40.png: PSNR = 30.97, SSIM = 0.7670\n",
      "Image intersection43.png: PSNR = 30.56, SSIM = 0.7527\n",
      "Image intersection44.png: PSNR = 31.84, SSIM = 0.8001\n",
      "Image intersection50.png: PSNR = 32.28, SSIM = 0.7842\n",
      "Image intersection52.png: PSNR = 32.08, SSIM = 0.7781\n",
      "Image intersection70.png: PSNR = 32.47, SSIM = 0.8670\n",
      "Image intersection76.png: PSNR = 34.68, SSIM = 0.9169\n",
      "Image intersection77.png: PSNR = 34.09, SSIM = 0.8968\n",
      "Image intersection87.png: PSNR = 32.21, SSIM = 0.7804\n",
      "Image intersection89.png: PSNR = 31.51, SSIM = 0.7444\n",
      "Image intersection99.png: PSNR = 31.44, SSIM = 0.7576\n",
      "Image mediumresidential15.png: PSNR = 30.18, SSIM = 0.6814\n",
      "Image mediumresidential19.png: PSNR = 31.23, SSIM = 0.7427\n",
      "Image mediumresidential34.png: PSNR = 30.87, SSIM = 0.8027\n",
      "Image mediumresidential40.png: PSNR = 30.73, SSIM = 0.7436\n",
      "Image mediumresidential44.png: PSNR = 30.68, SSIM = 0.7436\n",
      "Image mediumresidential49.png: PSNR = 30.63, SSIM = 0.7301\n",
      "Image mediumresidential52.png: PSNR = 31.14, SSIM = 0.7571\n",
      "Image mediumresidential53.png: PSNR = 30.90, SSIM = 0.7672\n",
      "Image mediumresidential73.png: PSNR = 29.25, SSIM = 0.6098\n",
      "Image mediumresidential76.png: PSNR = 33.59, SSIM = 0.9056\n",
      "Image mediumresidential77.png: PSNR = 34.15, SSIM = 0.9022\n",
      "Image mediumresidential78.png: PSNR = 34.62, SSIM = 0.9156\n",
      "Image mediumresidential79.png: PSNR = 34.57, SSIM = 0.9113\n",
      "Image mediumresidential80.png: PSNR = 34.24, SSIM = 0.8951\n",
      "Image mediumresidential81.png: PSNR = 29.97, SSIM = 0.7223\n",
      "Image mediumresidential83.png: PSNR = 30.38, SSIM = 0.7623\n",
      "Image mediumresidential86.png: PSNR = 30.53, SSIM = 0.7153\n",
      "Image mediumresidential89.png: PSNR = 33.58, SSIM = 0.8663\n",
      "Image mediumresidential93.png: PSNR = 32.57, SSIM = 0.8316\n",
      "Image mediumresidential97.png: PSNR = 30.99, SSIM = 0.7822\n",
      "Image mobilehomepark03.png: PSNR = 30.17, SSIM = 0.7182\n",
      "Image mobilehomepark04.png: PSNR = 30.76, SSIM = 0.7406\n",
      "Image mobilehomepark05.png: PSNR = 30.60, SSIM = 0.7707\n",
      "Image mobilehomepark16.png: PSNR = 30.72, SSIM = 0.7723\n",
      "Image mobilehomepark29.png: PSNR = 31.80, SSIM = 0.8609\n",
      "Image mobilehomepark48.png: PSNR = 31.29, SSIM = 0.8426\n",
      "Image mobilehomepark49.png: PSNR = 31.90, SSIM = 0.8712\n",
      "Image mobilehomepark50.png: PSNR = 31.46, SSIM = 0.8487\n",
      "Image mobilehomepark54.png: PSNR = 32.56, SSIM = 0.8842\n",
      "Image mobilehomepark57.png: PSNR = 32.17, SSIM = 0.8674\n",
      "Image mobilehomepark59.png: PSNR = 31.33, SSIM = 0.8394\n",
      "Image mobilehomepark61.png: PSNR = 32.55, SSIM = 0.8960\n",
      "Image mobilehomepark63.png: PSNR = 32.25, SSIM = 0.8798\n",
      "Image mobilehomepark64.png: PSNR = 31.93, SSIM = 0.8770\n",
      "Image mobilehomepark77.png: PSNR = 30.02, SSIM = 0.6971\n",
      "Image mobilehomepark80.png: PSNR = 29.09, SSIM = 0.6371\n",
      "Image mobilehomepark83.png: PSNR = 28.93, SSIM = 0.6009\n",
      "Image mobilehomepark84.png: PSNR = 28.72, SSIM = 0.5350\n",
      "Image mobilehomepark93.png: PSNR = 29.06, SSIM = 0.6445\n",
      "Image mobilehomepark95.png: PSNR = 28.74, SSIM = 0.5387\n",
      "Image overpass00.png: PSNR = 31.77, SSIM = 0.8301\n",
      "Image overpass09.png: PSNR = 31.33, SSIM = 0.8378\n",
      "Image overpass18.png: PSNR = 33.42, SSIM = 0.8710\n",
      "Image overpass19.png: PSNR = 32.44, SSIM = 0.8399\n",
      "Image overpass27.png: PSNR = 29.74, SSIM = 0.6008\n",
      "Image overpass40.png: PSNR = 30.89, SSIM = 0.7219\n",
      "Image overpass54.png: PSNR = 30.13, SSIM = 0.6717\n",
      "Image overpass56.png: PSNR = 32.98, SSIM = 0.8525\n",
      "Image overpass58.png: PSNR = 31.57, SSIM = 0.7840\n",
      "Image overpass63.png: PSNR = 31.09, SSIM = 0.7697\n",
      "Image overpass66.png: PSNR = 32.34, SSIM = 0.7773\n",
      "Image overpass72.png: PSNR = 30.21, SSIM = 0.6400\n",
      "Image overpass73.png: PSNR = 30.77, SSIM = 0.7077\n",
      "Image overpass76.png: PSNR = 30.91, SSIM = 0.7423\n",
      "Image overpass80.png: PSNR = 31.09, SSIM = 0.7088\n",
      "Image overpass85.png: PSNR = 30.44, SSIM = 0.6562\n",
      "Image overpass90.png: PSNR = 29.72, SSIM = 0.6195\n",
      "Image overpass91.png: PSNR = 30.68, SSIM = 0.7201\n",
      "Image overpass93.png: PSNR = 31.90, SSIM = 0.8124\n",
      "Image overpass95.png: PSNR = 31.70, SSIM = 0.8046\n",
      "Image parkinglot15.png: PSNR = 30.65, SSIM = 0.8272\n",
      "Image parkinglot18.png: PSNR = 31.57, SSIM = 0.8425\n",
      "Image parkinglot24.png: PSNR = 30.14, SSIM = 0.7321\n",
      "Image parkinglot40.png: PSNR = 30.39, SSIM = 0.7235\n",
      "Image parkinglot46.png: PSNR = 30.09, SSIM = 0.6860\n",
      "Image parkinglot52.png: PSNR = 31.02, SSIM = 0.7466\n",
      "Image parkinglot54.png: PSNR = 30.45, SSIM = 0.7503\n",
      "Image parkinglot61.png: PSNR = 30.70, SSIM = 0.7186\n",
      "Image parkinglot63.png: PSNR = 30.53, SSIM = 0.7631\n",
      "Image parkinglot64.png: PSNR = 30.58, SSIM = 0.7227\n",
      "Image parkinglot70.png: PSNR = 30.21, SSIM = 0.7390\n",
      "Image parkinglot71.png: PSNR = 30.12, SSIM = 0.7610\n",
      "Image parkinglot76.png: PSNR = 30.72, SSIM = 0.7539\n",
      "Image parkinglot82.png: PSNR = 31.29, SSIM = 0.8435\n",
      "Image parkinglot83.png: PSNR = 30.71, SSIM = 0.8207\n",
      "Image parkinglot93.png: PSNR = 30.33, SSIM = 0.6673\n",
      "Image parkinglot95.png: PSNR = 30.52, SSIM = 0.6675\n",
      "Image parkinglot96.png: PSNR = 30.28, SSIM = 0.6470\n",
      "Image parkinglot97.png: PSNR = 30.58, SSIM = 0.8113\n",
      "Image parkinglot99.png: PSNR = 31.25, SSIM = 0.8184\n",
      "Image river04.png: PSNR = 29.58, SSIM = 0.5654\n",
      "Image river11.png: PSNR = 29.84, SSIM = 0.5784\n",
      "Image river13.png: PSNR = 29.94, SSIM = 0.6302\n",
      "Image river16.png: PSNR = 30.63, SSIM = 0.6743\n",
      "Image river17.png: PSNR = 31.02, SSIM = 0.6980\n",
      "Image river23.png: PSNR = 30.27, SSIM = 0.6022\n",
      "Image river31.png: PSNR = 30.19, SSIM = 0.5589\n",
      "Image river33.png: PSNR = 29.43, SSIM = 0.5002\n",
      "Image river36.png: PSNR = 30.97, SSIM = 0.7445\n",
      "Image river45.png: PSNR = 30.65, SSIM = 0.7076\n",
      "Image river51.png: PSNR = 32.28, SSIM = 0.8124\n",
      "Image river66.png: PSNR = 29.06, SSIM = 0.4964\n",
      "Image river76.png: PSNR = 35.96, SSIM = 0.8871\n",
      "Image river80.png: PSNR = 31.95, SSIM = 0.7693\n",
      "Image river86.png: PSNR = 31.98, SSIM = 0.7619\n",
      "Image river89.png: PSNR = 32.37, SSIM = 0.7521\n",
      "Image river92.png: PSNR = 32.72, SSIM = 0.7779\n",
      "Image river93.png: PSNR = 31.42, SSIM = 0.6920\n",
      "Image river94.png: PSNR = 30.15, SSIM = 0.5754\n",
      "Image river99.png: PSNR = 34.88, SSIM = 0.8809\n",
      "Image runway04.png: PSNR = 33.36, SSIM = 0.8361\n",
      "Image runway07.png: PSNR = 33.05, SSIM = 0.7943\n",
      "Image runway08.png: PSNR = 32.76, SSIM = 0.7806\n",
      "Image runway11.png: PSNR = 33.18, SSIM = 0.8063\n",
      "Image runway12.png: PSNR = 33.14, SSIM = 0.7942\n",
      "Image runway16.png: PSNR = 33.58, SSIM = 0.8330\n",
      "Image runway31.png: PSNR = 34.22, SSIM = 0.8718\n",
      "Image runway39.png: PSNR = 33.45, SSIM = 0.8154\n",
      "Image runway41.png: PSNR = 32.37, SSIM = 0.8003\n",
      "Image runway42.png: PSNR = 32.38, SSIM = 0.7859\n",
      "Image runway43.png: PSNR = 32.73, SSIM = 0.8052\n",
      "Image runway56.png: PSNR = 32.79, SSIM = 0.8177\n",
      "Image runway66.png: PSNR = 32.17, SSIM = 0.7543\n",
      "Image runway67.png: PSNR = 31.06, SSIM = 0.6743\n",
      "Image runway72.png: PSNR = 35.09, SSIM = 0.8895\n",
      "Image runway74.png: PSNR = 34.38, SSIM = 0.8802\n",
      "Image runway76.png: PSNR = 34.96, SSIM = 0.8844\n",
      "Image runway82.png: PSNR = 33.41, SSIM = 0.8333\n",
      "Image runway83.png: PSNR = 33.12, SSIM = 0.8350\n",
      "Image runway95.png: PSNR = 34.99, SSIM = 0.8578\n",
      "Image sparseresidential00.png: PSNR = 30.56, SSIM = 0.6927\n",
      "Image sparseresidential01.png: PSNR = 30.96, SSIM = 0.6978\n",
      "Image sparseresidential04.png: PSNR = 30.39, SSIM = 0.6423\n",
      "Image sparseresidential07.png: PSNR = 29.50, SSIM = 0.5742\n",
      "Image sparseresidential09.png: PSNR = 29.42, SSIM = 0.5550\n",
      "Image sparseresidential11.png: PSNR = 29.68, SSIM = 0.6402\n",
      "Image sparseresidential23.png: PSNR = 30.11, SSIM = 0.6057\n",
      "Image sparseresidential28.png: PSNR = 30.67, SSIM = 0.6688\n",
      "Image sparseresidential33.png: PSNR = 30.48, SSIM = 0.6347\n",
      "Image sparseresidential41.png: PSNR = 30.33, SSIM = 0.6604\n",
      "Image sparseresidential45.png: PSNR = 36.58, SSIM = 0.9274\n",
      "Image sparseresidential64.png: PSNR = 30.54, SSIM = 0.7378\n",
      "Image sparseresidential67.png: PSNR = 30.44, SSIM = 0.7383\n",
      "Image sparseresidential70.png: PSNR = 31.14, SSIM = 0.7746\n",
      "Image sparseresidential71.png: PSNR = 30.25, SSIM = 0.7193\n",
      "Image sparseresidential72.png: PSNR = 30.92, SSIM = 0.7820\n",
      "Image sparseresidential81.png: PSNR = 32.34, SSIM = 0.8565\n",
      "Image sparseresidential82.png: PSNR = 32.56, SSIM = 0.8143\n",
      "Image sparseresidential92.png: PSNR = 30.72, SSIM = 0.7348\n",
      "Image sparseresidential95.png: PSNR = 31.60, SSIM = 0.8521\n",
      "Image storagetanks01.png: PSNR = 33.83, SSIM = 0.8787\n",
      "Image storagetanks02.png: PSNR = 33.54, SSIM = 0.8517\n",
      "Image storagetanks16.png: PSNR = 32.09, SSIM = 0.8493\n",
      "Image storagetanks24.png: PSNR = 32.01, SSIM = 0.7610\n",
      "Image storagetanks27.png: PSNR = 29.92, SSIM = 0.6495\n",
      "Image storagetanks29.png: PSNR = 29.78, SSIM = 0.5908\n",
      "Image storagetanks33.png: PSNR = 30.85, SSIM = 0.6834\n",
      "Image storagetanks36.png: PSNR = 30.47, SSIM = 0.6781\n",
      "Image storagetanks37.png: PSNR = 30.67, SSIM = 0.6768\n",
      "Image storagetanks41.png: PSNR = 29.81, SSIM = 0.6338\n",
      "Image storagetanks42.png: PSNR = 30.41, SSIM = 0.7624\n",
      "Image storagetanks43.png: PSNR = 30.58, SSIM = 0.7020\n",
      "Image storagetanks57.png: PSNR = 34.43, SSIM = 0.8534\n",
      "Image storagetanks67.png: PSNR = 36.00, SSIM = 0.9323\n",
      "Image storagetanks68.png: PSNR = 33.18, SSIM = 0.8899\n",
      "Image storagetanks69.png: PSNR = 33.73, SSIM = 0.8879\n",
      "Image storagetanks70.png: PSNR = 34.12, SSIM = 0.9034\n",
      "Image storagetanks87.png: PSNR = 36.75, SSIM = 0.9157\n",
      "Image storagetanks90.png: PSNR = 31.84, SSIM = 0.7827\n",
      "Image storagetanks91.png: PSNR = 31.17, SSIM = 0.7718\n",
      "Image tenniscourt05.png: PSNR = 31.02, SSIM = 0.7214\n",
      "Image tenniscourt13.png: PSNR = 30.61, SSIM = 0.6657\n",
      "Image tenniscourt18.png: PSNR = 33.22, SSIM = 0.8629\n",
      "Image tenniscourt19.png: PSNR = 32.75, SSIM = 0.8466\n",
      "Image tenniscourt23.png: PSNR = 34.91, SSIM = 0.9019\n",
      "Image tenniscourt24.png: PSNR = 32.67, SSIM = 0.8366\n",
      "Image tenniscourt25.png: PSNR = 31.83, SSIM = 0.7967\n",
      "Image tenniscourt26.png: PSNR = 31.77, SSIM = 0.8149\n",
      "Image tenniscourt27.png: PSNR = 31.95, SSIM = 0.8226\n",
      "Image tenniscourt37.png: PSNR = 31.26, SSIM = 0.6965\n",
      "Image tenniscourt38.png: PSNR = 31.09, SSIM = 0.6881\n",
      "Image tenniscourt44.png: PSNR = 31.31, SSIM = 0.6986\n",
      "Image tenniscourt52.png: PSNR = 33.23, SSIM = 0.8635\n",
      "Image tenniscourt60.png: PSNR = 34.10, SSIM = 0.8699\n",
      "Image tenniscourt63.png: PSNR = 33.27, SSIM = 0.8407\n",
      "Image tenniscourt81.png: PSNR = 36.31, SSIM = 0.9032\n",
      "Image tenniscourt85.png: PSNR = 33.77, SSIM = 0.8149\n",
      "Image tenniscourt88.png: PSNR = 33.28, SSIM = 0.8130\n",
      "Image tenniscourt93.png: PSNR = 33.30, SSIM = 0.8579\n",
      "Image tenniscourt95.png: PSNR = 33.64, SSIM = 0.8848\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "71c1d26e",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha=0.5\n",
      "Average PSNR: 31.87\n",
      "Average SSIM: 0.7619\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"alpha=0.5\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bf39404",
   "metadata": {},
   "source": [
    "# Interpolating with alpha =  0.6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "f32a28cf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interpolating with alpha =  0.6\n"
     ]
    }
   ],
   "source": [
    "#net_interp.py\n",
    "import sys\n",
    "import torch\n",
    "from collections import OrderedDict\n",
    "\n",
    "alpha =0.6\n",
    "\n",
    "net_PSNR_path = './models/RRDB_PSNR_x4.pth'\n",
    "net_ESRGAN_path = './models/RRDB_ESRGAN_x4.pth'\n",
    "net_interp_path = './models/interp_{:02d}.pth'.format(int(alpha*10))\n",
    "\n",
    "net_PSNR = torch.load(net_PSNR_path)\n",
    "net_ESRGAN = torch.load(net_ESRGAN_path)\n",
    "net_interp = OrderedDict()\n",
    "\n",
    "print('Interpolating with alpha = ', alpha)\n",
    "for k, v_PSNR in net_PSNR.items():\n",
    "    v_ESRGAN = net_ESRGAN[k]\n",
    "    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN\n",
    "\n",
    "torch.save(net_interp, net_interp_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "92b32108",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/interp_06.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "#test.py\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/interp_06.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "d6c211f7",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.34, SSIM = 0.0930\n",
      "Image agricultural12.png: PSNR = 31.16, SSIM = 0.9091\n",
      "Image agricultural27.png: PSNR = 28.76, SSIM = 0.2470\n",
      "Image agricultural28.png: PSNR = 28.77, SSIM = 0.2366\n",
      "Image agricultural33.png: PSNR = 30.78, SSIM = 0.4933\n",
      "Image agricultural39.png: PSNR = 32.53, SSIM = 0.8153\n",
      "Image agricultural54.png: PSNR = 31.89, SSIM = 0.6929\n",
      "Image agricultural55.png: PSNR = 36.43, SSIM = 0.8618\n",
      "Image agricultural60.png: PSNR = 30.70, SSIM = 0.7523\n",
      "Image agricultural61.png: PSNR = 33.59, SSIM = 0.9545\n",
      "Image agricultural62.png: PSNR = 28.62, SSIM = 0.2067\n",
      "Image agricultural63.png: PSNR = 30.17, SSIM = 0.4418\n",
      "Image agricultural67.png: PSNR = 27.85, SSIM = 0.1036\n",
      "Image agricultural69.png: PSNR = 27.76, SSIM = 0.1118\n",
      "Image agricultural72.png: PSNR = 27.89, SSIM = 0.1134\n",
      "Image agricultural74.png: PSNR = 29.15, SSIM = 0.4261\n",
      "Image agricultural76.png: PSNR = 30.22, SSIM = 0.7248\n",
      "Image agricultural83.png: PSNR = 28.24, SSIM = 0.1855\n",
      "Image agricultural84.png: PSNR = 28.12, SSIM = 0.1304\n",
      "Image agricultural85.png: PSNR = 28.05, SSIM = 0.1152\n",
      "Image airplane04.png: PSNR = 33.40, SSIM = 0.8890\n",
      "Image airplane09.png: PSNR = 33.18, SSIM = 0.8856\n",
      "Image airplane17.png: PSNR = 31.91, SSIM = 0.8202\n",
      "Image airplane25.png: PSNR = 33.92, SSIM = 0.8593\n",
      "Image airplane28.png: PSNR = 31.51, SSIM = 0.7247\n",
      "Image airplane29.png: PSNR = 31.56, SSIM = 0.7513\n",
      "Image airplane30.png: PSNR = 31.57, SSIM = 0.7713\n",
      "Image airplane32.png: PSNR = 32.42, SSIM = 0.7764\n",
      "Image airplane40.png: PSNR = 32.27, SSIM = 0.8104\n",
      "Image airplane48.png: PSNR = 30.69, SSIM = 0.7984\n",
      "Image airplane55.png: PSNR = 31.50, SSIM = 0.8055\n",
      "Image airplane65.png: PSNR = 30.79, SSIM = 0.7683\n",
      "Image airplane71.png: PSNR = 31.08, SSIM = 0.7758\n",
      "Image airplane74.png: PSNR = 33.21, SSIM = 0.8685\n",
      "Image airplane75.png: PSNR = 33.38, SSIM = 0.8736\n",
      "Image airplane80.png: PSNR = 35.98, SSIM = 0.9240\n",
      "Image airplane81.png: PSNR = 33.07, SSIM = 0.8382\n",
      "Image airplane85.png: PSNR = 33.53, SSIM = 0.8540\n",
      "Image airplane86.png: PSNR = 32.33, SSIM = 0.7688\n",
      "Image airplane87.png: PSNR = 31.05, SSIM = 0.7789\n",
      "Image baseballdiamond03.png: PSNR = 33.95, SSIM = 0.8237\n",
      "Image baseballdiamond04.png: PSNR = 32.79, SSIM = 0.7927\n",
      "Image baseballdiamond05.png: PSNR = 32.18, SSIM = 0.7745\n",
      "Image baseballdiamond13.png: PSNR = 31.46, SSIM = 0.7498\n",
      "Image baseballdiamond16.png: PSNR = 31.07, SSIM = 0.6589\n",
      "Image baseballdiamond24.png: PSNR = 32.44, SSIM = 0.7292\n",
      "Image baseballdiamond31.png: PSNR = 33.04, SSIM = 0.8504\n",
      "Image baseballdiamond32.png: PSNR = 36.61, SSIM = 0.9260\n",
      "Image baseballdiamond37.png: PSNR = 33.19, SSIM = 0.8522\n",
      "Image baseballdiamond40.png: PSNR = 32.97, SSIM = 0.8421\n",
      "Image baseballdiamond47.png: PSNR = 31.87, SSIM = 0.7913\n",
      "Image baseballdiamond50.png: PSNR = 32.44, SSIM = 0.8236\n",
      "Image baseballdiamond53.png: PSNR = 36.99, SSIM = 0.9312\n",
      "Image baseballdiamond58.png: PSNR = 34.36, SSIM = 0.8932\n",
      "Image baseballdiamond72.png: PSNR = 36.33, SSIM = 0.9031\n",
      "Image baseballdiamond74.png: PSNR = 36.45, SSIM = 0.9164\n",
      "Image baseballdiamond79.png: PSNR = 30.38, SSIM = 0.5862\n",
      "Image baseballdiamond81.png: PSNR = 33.64, SSIM = 0.8304\n",
      "Image baseballdiamond83.png: PSNR = 35.39, SSIM = 0.8462\n",
      "Image baseballdiamond96.png: PSNR = 34.50, SSIM = 0.8955\n",
      "Image beach02.png: PSNR = 31.79, SSIM = 0.7286\n",
      "Image beach11.png: PSNR = 37.75, SSIM = 0.9209\n",
      "Image beach13.png: PSNR = 39.72, SSIM = 0.9474\n",
      "Image beach16.png: PSNR = 42.47, SSIM = 0.9735\n",
      "Image beach19.png: PSNR = 35.94, SSIM = 0.9098\n",
      "Image beach26.png: PSNR = 38.55, SSIM = 0.9357\n",
      "Image beach46.png: PSNR = 33.85, SSIM = 0.8139\n",
      "Image beach50.png: PSNR = 36.28, SSIM = 0.9063\n",
      "Image beach54.png: PSNR = 36.74, SSIM = 0.9065\n",
      "Image beach60.png: PSNR = 33.92, SSIM = 0.8473\n",
      "Image beach72.png: PSNR = 34.09, SSIM = 0.8356\n",
      "Image beach73.png: PSNR = 31.68, SSIM = 0.6662\n",
      "Image beach76.png: PSNR = 37.86, SSIM = 0.9382\n",
      "Image beach85.png: PSNR = 36.80, SSIM = 0.9199\n",
      "Image beach86.png: PSNR = 37.27, SSIM = 0.9216\n",
      "Image beach88.png: PSNR = 37.18, SSIM = 0.9328\n",
      "Image beach89.png: PSNR = 38.11, SSIM = 0.9457\n",
      "Image beach94.png: PSNR = 33.15, SSIM = 0.8312\n",
      "Image beach97.png: PSNR = 33.18, SSIM = 0.8373\n",
      "Image beach99.png: PSNR = 33.27, SSIM = 0.8297\n",
      "Image buildings27.png: PSNR = 31.69, SSIM = 0.7614\n",
      "Image buildings32.png: PSNR = 30.98, SSIM = 0.7784\n",
      "Image buildings34.png: PSNR = 34.71, SSIM = 0.9024\n",
      "Image buildings35.png: PSNR = 32.40, SSIM = 0.8368\n",
      "Image buildings36.png: PSNR = 30.52, SSIM = 0.7529\n",
      "Image buildings44.png: PSNR = 30.20, SSIM = 0.7350\n",
      "Image buildings45.png: PSNR = 31.57, SSIM = 0.8167\n",
      "Image buildings46.png: PSNR = 30.60, SSIM = 0.7500\n",
      "Image buildings51.png: PSNR = 31.46, SSIM = 0.8138\n",
      "Image buildings52.png: PSNR = 37.00, SSIM = 0.9566\n",
      "Image buildings56.png: PSNR = 30.84, SSIM = 0.7537\n",
      "Image buildings63.png: PSNR = 31.81, SSIM = 0.8251\n",
      "Image buildings64.png: PSNR = 32.61, SSIM = 0.8743\n",
      "Image buildings65.png: PSNR = 34.92, SSIM = 0.9007\n",
      "Image buildings69.png: PSNR = 33.96, SSIM = 0.9109\n",
      "Image buildings73.png: PSNR = 33.03, SSIM = 0.8851\n",
      "Image buildings74.png: PSNR = 32.49, SSIM = 0.8522\n",
      "Image buildings79.png: PSNR = 29.80, SSIM = 0.6385\n",
      "Image buildings89.png: PSNR = 31.52, SSIM = 0.8140\n",
      "Image buildings93.png: PSNR = 30.96, SSIM = 0.7599\n",
      "Image chaparral09.png: PSNR = 30.11, SSIM = 0.7629\n",
      "Image chaparral15.png: PSNR = 31.00, SSIM = 0.8321\n",
      "Image chaparral17.png: PSNR = 32.39, SSIM = 0.8188\n",
      "Image chaparral23.png: PSNR = 30.08, SSIM = 0.7840\n",
      "Image chaparral26.png: PSNR = 30.03, SSIM = 0.7318\n",
      "Image chaparral33.png: PSNR = 30.99, SSIM = 0.8335\n",
      "Image chaparral37.png: PSNR = 30.69, SSIM = 0.8171\n",
      "Image chaparral42.png: PSNR = 29.24, SSIM = 0.5454\n",
      "Image chaparral43.png: PSNR = 30.51, SSIM = 0.7508\n",
      "Image chaparral50.png: PSNR = 29.94, SSIM = 0.7282\n",
      "Image chaparral55.png: PSNR = 29.99, SSIM = 0.7835\n",
      "Image chaparral61.png: PSNR = 28.22, SSIM = 0.2401\n",
      "Image chaparral63.png: PSNR = 28.15, SSIM = 0.2081\n",
      "Image chaparral64.png: PSNR = 28.10, SSIM = 0.2306\n",
      "Image chaparral68.png: PSNR = 30.58, SSIM = 0.8179\n",
      "Image chaparral71.png: PSNR = 30.17, SSIM = 0.7573\n",
      "Image chaparral80.png: PSNR = 29.75, SSIM = 0.6811\n",
      "Image chaparral83.png: PSNR = 29.48, SSIM = 0.6815\n",
      "Image chaparral88.png: PSNR = 31.34, SSIM = 0.8087\n",
      "Image chaparral99.png: PSNR = 29.55, SSIM = 0.7415\n",
      "Image denseresidential02.png: PSNR = 31.24, SSIM = 0.8575\n",
      "Image denseresidential12.png: PSNR = 31.36, SSIM = 0.8789\n",
      "Image denseresidential14.png: PSNR = 30.29, SSIM = 0.7813\n",
      "Image denseresidential15.png: PSNR = 30.25, SSIM = 0.7940\n",
      "Image denseresidential29.png: PSNR = 30.19, SSIM = 0.7490\n",
      "Image denseresidential31.png: PSNR = 30.70, SSIM = 0.8088\n",
      "Image denseresidential34.png: PSNR = 31.29, SSIM = 0.7555\n",
      "Image denseresidential38.png: PSNR = 30.43, SSIM = 0.7318\n",
      "Image denseresidential46.png: PSNR = 31.07, SSIM = 0.8053\n",
      "Image denseresidential53.png: PSNR = 30.66, SSIM = 0.7397\n",
      "Image denseresidential60.png: PSNR = 30.70, SSIM = 0.8022\n",
      "Image denseresidential64.png: PSNR = 31.08, SSIM = 0.8318\n",
      "Image denseresidential65.png: PSNR = 30.55, SSIM = 0.7643\n",
      "Image denseresidential68.png: PSNR = 30.59, SSIM = 0.7652\n",
      "Image denseresidential75.png: PSNR = 31.18, SSIM = 0.8041\n",
      "Image denseresidential88.png: PSNR = 31.60, SSIM = 0.7810\n",
      "Image denseresidential89.png: PSNR = 31.34, SSIM = 0.7601\n",
      "Image denseresidential91.png: PSNR = 31.93, SSIM = 0.8128\n",
      "Image denseresidential96.png: PSNR = 30.52, SSIM = 0.7499\n",
      "Image denseresidential97.png: PSNR = 30.76, SSIM = 0.7619\n",
      "Image forest08.png: PSNR = 29.97, SSIM = 0.5954\n",
      "Image forest09.png: PSNR = 29.74, SSIM = 0.5705\n",
      "Image forest10.png: PSNR = 32.34, SSIM = 0.7249\n",
      "Image forest11.png: PSNR = 31.22, SSIM = 0.6658\n",
      "Image forest12.png: PSNR = 31.01, SSIM = 0.6437\n",
      "Image forest19.png: PSNR = 28.89, SSIM = 0.4582\n",
      "Image forest20.png: PSNR = 28.61, SSIM = 0.4462\n",
      "Image forest29.png: PSNR = 30.16, SSIM = 0.6458\n",
      "Image forest34.png: PSNR = 30.20, SSIM = 0.6437\n",
      "Image forest39.png: PSNR = 30.63, SSIM = 0.6823\n",
      "Image forest45.png: PSNR = 31.06, SSIM = 0.7311\n",
      "Image forest53.png: PSNR = 30.90, SSIM = 0.7349\n",
      "Image forest56.png: PSNR = 30.14, SSIM = 0.6977\n",
      "Image forest62.png: PSNR = 31.12, SSIM = 0.8271\n",
      "Image forest69.png: PSNR = 29.69, SSIM = 0.5911\n",
      "Image forest73.png: PSNR = 29.29, SSIM = 0.5332\n",
      "Image forest74.png: PSNR = 29.86, SSIM = 0.5756\n",
      "Image forest80.png: PSNR = 30.59, SSIM = 0.6321\n",
      "Image forest84.png: PSNR = 29.55, SSIM = 0.5459\n",
      "Image forest93.png: PSNR = 29.31, SSIM = 0.5126\n",
      "Image freeway00.png: PSNR = 31.76, SSIM = 0.8677\n",
      "Image freeway03.png: PSNR = 31.91, SSIM = 0.8497\n",
      "Image freeway07.png: PSNR = 32.14, SSIM = 0.8859\n",
      "Image freeway09.png: PSNR = 33.43, SSIM = 0.9035\n",
      "Image freeway12.png: PSNR = 33.48, SSIM = 0.8934\n",
      "Image freeway25.png: PSNR = 31.56, SSIM = 0.7314\n",
      "Image freeway26.png: PSNR = 31.11, SSIM = 0.6793\n",
      "Image freeway44.png: PSNR = 30.47, SSIM = 0.6415\n",
      "Image freeway55.png: PSNR = 32.19, SSIM = 0.8474\n",
      "Image freeway64.png: PSNR = 31.48, SSIM = 0.8143\n",
      "Image freeway67.png: PSNR = 32.14, SSIM = 0.8439\n",
      "Image freeway71.png: PSNR = 33.17, SSIM = 0.8813\n",
      "Image freeway74.png: PSNR = 34.81, SSIM = 0.9075\n",
      "Image freeway75.png: PSNR = 34.75, SSIM = 0.9224\n",
      "Image freeway76.png: PSNR = 31.18, SSIM = 0.8139\n",
      "Image freeway77.png: PSNR = 32.70, SSIM = 0.8699\n",
      "Image freeway78.png: PSNR = 33.91, SSIM = 0.8929\n",
      "Image freeway87.png: PSNR = 28.85, SSIM = 0.4670\n",
      "Image freeway92.png: PSNR = 33.63, SSIM = 0.8648\n",
      "Image freeway93.png: PSNR = 30.59, SSIM = 0.6483\n",
      "Image golfcourse07.png: PSNR = 33.18, SSIM = 0.7901\n",
      "Image golfcourse08.png: PSNR = 32.57, SSIM = 0.7483\n",
      "Image golfcourse14.png: PSNR = 33.52, SSIM = 0.8068\n",
      "Image golfcourse17.png: PSNR = 34.68, SSIM = 0.8415\n",
      "Image golfcourse18.png: PSNR = 32.96, SSIM = 0.7843\n",
      "Image golfcourse19.png: PSNR = 31.52, SSIM = 0.7279\n",
      "Image golfcourse24.png: PSNR = 31.97, SSIM = 0.7711\n",
      "Image golfcourse27.png: PSNR = 31.72, SSIM = 0.6881\n",
      "Image golfcourse33.png: PSNR = 31.60, SSIM = 0.6703\n",
      "Image golfcourse35.png: PSNR = 31.96, SSIM = 0.7115\n",
      "Image golfcourse45.png: PSNR = 35.37, SSIM = 0.8737\n",
      "Image golfcourse50.png: PSNR = 33.35, SSIM = 0.8068\n",
      "Image golfcourse52.png: PSNR = 32.05, SSIM = 0.7512\n",
      "Image golfcourse73.png: PSNR = 35.75, SSIM = 0.9029\n",
      "Image golfcourse76.png: PSNR = 32.97, SSIM = 0.8230\n",
      "Image golfcourse77.png: PSNR = 33.55, SSIM = 0.8403\n",
      "Image golfcourse78.png: PSNR = 33.85, SSIM = 0.8562\n",
      "Image golfcourse81.png: PSNR = 32.49, SSIM = 0.7812\n",
      "Image golfcourse82.png: PSNR = 32.10, SSIM = 0.7885\n",
      "Image golfcourse85.png: PSNR = 31.97, SSIM = 0.7776\n",
      "Image harbor00.png: PSNR = 32.03, SSIM = 0.8575\n",
      "Image harbor05.png: PSNR = 30.61, SSIM = 0.7852\n",
      "Image harbor13.png: PSNR = 29.85, SSIM = 0.7618\n",
      "Image harbor14.png: PSNR = 30.00, SSIM = 0.7575\n",
      "Image harbor15.png: PSNR = 30.12, SSIM = 0.7593\n",
      "Image harbor19.png: PSNR = 30.84, SSIM = 0.8015\n",
      "Image harbor22.png: PSNR = 31.87, SSIM = 0.8804\n",
      "Image harbor24.png: PSNR = 31.03, SSIM = 0.8656\n",
      "Image harbor32.png: PSNR = 33.32, SSIM = 0.8747\n",
      "Image harbor33.png: PSNR = 32.97, SSIM = 0.8647\n",
      "Image harbor35.png: PSNR = 31.48, SSIM = 0.8227\n",
      "Image harbor49.png: PSNR = 31.07, SSIM = 0.8278\n",
      "Image harbor61.png: PSNR = 30.07, SSIM = 0.7619\n",
      "Image harbor65.png: PSNR = 30.46, SSIM = 0.7492\n",
      "Image harbor67.png: PSNR = 31.36, SSIM = 0.8676\n",
      "Image harbor68.png: PSNR = 31.97, SSIM = 0.8921\n",
      "Image harbor75.png: PSNR = 31.97, SSIM = 0.8452\n",
      "Image harbor81.png: PSNR = 32.48, SSIM = 0.8845\n",
      "Image harbor83.png: PSNR = 30.26, SSIM = 0.7646\n",
      "Image harbor88.png: PSNR = 30.84, SSIM = 0.7708\n",
      "Image intersection00.png: PSNR = 31.95, SSIM = 0.8600\n",
      "Image intersection10.png: PSNR = 31.60, SSIM = 0.8339\n",
      "Image intersection16.png: PSNR = 32.74, SSIM = 0.7972\n",
      "Image intersection19.png: PSNR = 31.48, SSIM = 0.7942\n",
      "Image intersection26.png: PSNR = 32.17, SSIM = 0.7641\n",
      "Image intersection28.png: PSNR = 31.48, SSIM = 0.7725\n",
      "Image intersection29.png: PSNR = 31.38, SSIM = 0.7514\n",
      "Image intersection30.png: PSNR = 30.94, SSIM = 0.7418\n",
      "Image intersection32.png: PSNR = 31.17, SSIM = 0.7568\n",
      "Image intersection40.png: PSNR = 30.81, SSIM = 0.7503\n",
      "Image intersection43.png: PSNR = 30.40, SSIM = 0.7340\n",
      "Image intersection44.png: PSNR = 31.68, SSIM = 0.7865\n",
      "Image intersection50.png: PSNR = 32.24, SSIM = 0.7792\n",
      "Image intersection52.png: PSNR = 32.05, SSIM = 0.7752\n",
      "Image intersection70.png: PSNR = 32.39, SSIM = 0.8636\n",
      "Image intersection76.png: PSNR = 34.57, SSIM = 0.9137\n",
      "Image intersection77.png: PSNR = 34.03, SSIM = 0.8939\n",
      "Image intersection87.png: PSNR = 32.12, SSIM = 0.7761\n",
      "Image intersection89.png: PSNR = 31.46, SSIM = 0.7396\n",
      "Image intersection99.png: PSNR = 31.31, SSIM = 0.7461\n",
      "Image mediumresidential15.png: PSNR = 30.10, SSIM = 0.6701\n",
      "Image mediumresidential19.png: PSNR = 31.16, SSIM = 0.7350\n",
      "Image mediumresidential34.png: PSNR = 30.76, SSIM = 0.7915\n",
      "Image mediumresidential40.png: PSNR = 30.70, SSIM = 0.7386\n",
      "Image mediumresidential44.png: PSNR = 30.62, SSIM = 0.7367\n",
      "Image mediumresidential49.png: PSNR = 30.57, SSIM = 0.7226\n",
      "Image mediumresidential52.png: PSNR = 31.07, SSIM = 0.7482\n",
      "Image mediumresidential53.png: PSNR = 30.87, SSIM = 0.7610\n",
      "Image mediumresidential73.png: PSNR = 29.22, SSIM = 0.5967\n",
      "Image mediumresidential76.png: PSNR = 33.51, SSIM = 0.9028\n",
      "Image mediumresidential77.png: PSNR = 34.04, SSIM = 0.8986\n",
      "Image mediumresidential78.png: PSNR = 34.51, SSIM = 0.9123\n",
      "Image mediumresidential79.png: PSNR = 34.47, SSIM = 0.9089\n",
      "Image mediumresidential80.png: PSNR = 34.14, SSIM = 0.8917\n",
      "Image mediumresidential81.png: PSNR = 29.89, SSIM = 0.7111\n",
      "Image mediumresidential83.png: PSNR = 30.25, SSIM = 0.7475\n",
      "Image mediumresidential86.png: PSNR = 30.41, SSIM = 0.7020\n",
      "Image mediumresidential89.png: PSNR = 33.43, SSIM = 0.8604\n",
      "Image mediumresidential93.png: PSNR = 32.47, SSIM = 0.8253\n",
      "Image mediumresidential97.png: PSNR = 30.94, SSIM = 0.7746\n",
      "Image mobilehomepark03.png: PSNR = 30.12, SSIM = 0.7094\n",
      "Image mobilehomepark04.png: PSNR = 30.74, SSIM = 0.7358\n",
      "Image mobilehomepark05.png: PSNR = 30.58, SSIM = 0.7666\n",
      "Image mobilehomepark16.png: PSNR = 30.66, SSIM = 0.7663\n",
      "Image mobilehomepark29.png: PSNR = 31.66, SSIM = 0.8536\n",
      "Image mobilehomepark48.png: PSNR = 31.19, SSIM = 0.8368\n",
      "Image mobilehomepark49.png: PSNR = 31.79, SSIM = 0.8660\n",
      "Image mobilehomepark50.png: PSNR = 31.33, SSIM = 0.8419\n",
      "Image mobilehomepark54.png: PSNR = 32.48, SSIM = 0.8802\n",
      "Image mobilehomepark57.png: PSNR = 32.03, SSIM = 0.8618\n",
      "Image mobilehomepark59.png: PSNR = 31.19, SSIM = 0.8299\n",
      "Image mobilehomepark61.png: PSNR = 32.41, SSIM = 0.8912\n",
      "Image mobilehomepark63.png: PSNR = 32.14, SSIM = 0.8743\n",
      "Image mobilehomepark64.png: PSNR = 31.80, SSIM = 0.8702\n",
      "Image mobilehomepark77.png: PSNR = 29.99, SSIM = 0.6912\n",
      "Image mobilehomepark80.png: PSNR = 29.01, SSIM = 0.6206\n",
      "Image mobilehomepark83.png: PSNR = 28.90, SSIM = 0.5889\n",
      "Image mobilehomepark84.png: PSNR = 28.70, SSIM = 0.5246\n",
      "Image mobilehomepark93.png: PSNR = 29.00, SSIM = 0.6315\n",
      "Image mobilehomepark95.png: PSNR = 28.70, SSIM = 0.5265\n",
      "Image overpass00.png: PSNR = 31.54, SSIM = 0.8155\n",
      "Image overpass09.png: PSNR = 31.19, SSIM = 0.8293\n",
      "Image overpass18.png: PSNR = 33.09, SSIM = 0.8556\n",
      "Image overpass19.png: PSNR = 32.23, SSIM = 0.8267\n",
      "Image overpass27.png: PSNR = 29.64, SSIM = 0.5846\n",
      "Image overpass40.png: PSNR = 30.77, SSIM = 0.7088\n",
      "Image overpass54.png: PSNR = 29.96, SSIM = 0.6512\n",
      "Image overpass56.png: PSNR = 32.91, SSIM = 0.8483\n",
      "Image overpass58.png: PSNR = 31.42, SSIM = 0.7720\n",
      "Image overpass63.png: PSNR = 31.01, SSIM = 0.7621\n",
      "Image overpass66.png: PSNR = 32.28, SSIM = 0.7728\n",
      "Image overpass72.png: PSNR = 30.16, SSIM = 0.6313\n",
      "Image overpass73.png: PSNR = 30.64, SSIM = 0.6949\n",
      "Image overpass76.png: PSNR = 30.78, SSIM = 0.7289\n",
      "Image overpass80.png: PSNR = 31.01, SSIM = 0.7025\n",
      "Image overpass85.png: PSNR = 30.42, SSIM = 0.6510\n",
      "Image overpass90.png: PSNR = 29.66, SSIM = 0.6124\n",
      "Image overpass91.png: PSNR = 30.57, SSIM = 0.7078\n",
      "Image overpass93.png: PSNR = 31.84, SSIM = 0.8069\n",
      "Image overpass95.png: PSNR = 31.59, SSIM = 0.7977\n",
      "Image parkinglot15.png: PSNR = 30.49, SSIM = 0.8117\n",
      "Image parkinglot18.png: PSNR = 31.54, SSIM = 0.8402\n",
      "Image parkinglot24.png: PSNR = 30.09, SSIM = 0.7242\n",
      "Image parkinglot40.png: PSNR = 30.38, SSIM = 0.7180\n",
      "Image parkinglot46.png: PSNR = 30.06, SSIM = 0.6798\n",
      "Image parkinglot52.png: PSNR = 30.97, SSIM = 0.7400\n",
      "Image parkinglot54.png: PSNR = 30.42, SSIM = 0.7441\n",
      "Image parkinglot61.png: PSNR = 30.66, SSIM = 0.7128\n",
      "Image parkinglot63.png: PSNR = 30.47, SSIM = 0.7542\n",
      "Image parkinglot64.png: PSNR = 30.56, SSIM = 0.7187\n",
      "Image parkinglot70.png: PSNR = 30.13, SSIM = 0.7287\n",
      "Image parkinglot71.png: PSNR = 30.04, SSIM = 0.7456\n",
      "Image parkinglot76.png: PSNR = 30.59, SSIM = 0.7359\n",
      "Image parkinglot82.png: PSNR = 31.18, SSIM = 0.8338\n",
      "Image parkinglot83.png: PSNR = 30.60, SSIM = 0.8103\n",
      "Image parkinglot93.png: PSNR = 30.27, SSIM = 0.6544\n",
      "Image parkinglot95.png: PSNR = 30.48, SSIM = 0.6604\n",
      "Image parkinglot96.png: PSNR = 30.24, SSIM = 0.6350\n",
      "Image parkinglot97.png: PSNR = 30.50, SSIM = 0.7985\n",
      "Image parkinglot99.png: PSNR = 31.14, SSIM = 0.8090\n",
      "Image river04.png: PSNR = 29.55, SSIM = 0.5577\n",
      "Image river11.png: PSNR = 29.79, SSIM = 0.5694\n",
      "Image river13.png: PSNR = 29.92, SSIM = 0.6220\n",
      "Image river16.png: PSNR = 30.60, SSIM = 0.6690\n",
      "Image river17.png: PSNR = 30.99, SSIM = 0.6907\n",
      "Image river23.png: PSNR = 30.20, SSIM = 0.5926\n",
      "Image river31.png: PSNR = 30.17, SSIM = 0.5560\n",
      "Image river33.png: PSNR = 29.41, SSIM = 0.4957\n",
      "Image river36.png: PSNR = 30.88, SSIM = 0.7330\n",
      "Image river45.png: PSNR = 30.54, SSIM = 0.6924\n",
      "Image river51.png: PSNR = 32.23, SSIM = 0.8082\n",
      "Image river66.png: PSNR = 29.01, SSIM = 0.4788\n",
      "Image river76.png: PSNR = 35.84, SSIM = 0.8838\n",
      "Image river80.png: PSNR = 31.90, SSIM = 0.7638\n",
      "Image river86.png: PSNR = 31.87, SSIM = 0.7535\n",
      "Image river89.png: PSNR = 32.28, SSIM = 0.7441\n",
      "Image river92.png: PSNR = 32.64, SSIM = 0.7703\n",
      "Image river93.png: PSNR = 31.28, SSIM = 0.6777\n",
      "Image river94.png: PSNR = 30.09, SSIM = 0.5643\n",
      "Image river99.png: PSNR = 34.81, SSIM = 0.8767\n",
      "Image runway04.png: PSNR = 33.24, SSIM = 0.8318\n",
      "Image runway07.png: PSNR = 32.94, SSIM = 0.7888\n",
      "Image runway08.png: PSNR = 32.62, SSIM = 0.7740\n",
      "Image runway11.png: PSNR = 33.04, SSIM = 0.8006\n",
      "Image runway12.png: PSNR = 32.99, SSIM = 0.7870\n",
      "Image runway16.png: PSNR = 33.44, SSIM = 0.8276\n",
      "Image runway31.png: PSNR = 34.14, SSIM = 0.8683\n",
      "Image runway39.png: PSNR = 33.21, SSIM = 0.8010\n",
      "Image runway41.png: PSNR = 32.33, SSIM = 0.7963\n",
      "Image runway42.png: PSNR = 32.33, SSIM = 0.7807\n",
      "Image runway43.png: PSNR = 32.71, SSIM = 0.8026\n",
      "Image runway56.png: PSNR = 32.71, SSIM = 0.8114\n",
      "Image runway66.png: PSNR = 32.15, SSIM = 0.7508\n",
      "Image runway67.png: PSNR = 31.02, SSIM = 0.6687\n",
      "Image runway72.png: PSNR = 35.10, SSIM = 0.8877\n",
      "Image runway74.png: PSNR = 34.35, SSIM = 0.8781\n",
      "Image runway76.png: PSNR = 34.95, SSIM = 0.8816\n",
      "Image runway82.png: PSNR = 33.36, SSIM = 0.8298\n",
      "Image runway83.png: PSNR = 33.03, SSIM = 0.8307\n",
      "Image runway95.png: PSNR = 34.92, SSIM = 0.8550\n",
      "Image sparseresidential00.png: PSNR = 30.51, SSIM = 0.6869\n",
      "Image sparseresidential01.png: PSNR = 30.92, SSIM = 0.6930\n",
      "Image sparseresidential04.png: PSNR = 30.34, SSIM = 0.6347\n",
      "Image sparseresidential07.png: PSNR = 29.46, SSIM = 0.5671\n",
      "Image sparseresidential09.png: PSNR = 29.38, SSIM = 0.5482\n",
      "Image sparseresidential11.png: PSNR = 29.64, SSIM = 0.6317\n",
      "Image sparseresidential23.png: PSNR = 30.08, SSIM = 0.5999\n",
      "Image sparseresidential28.png: PSNR = 30.62, SSIM = 0.6637\n",
      "Image sparseresidential33.png: PSNR = 30.44, SSIM = 0.6294\n",
      "Image sparseresidential41.png: PSNR = 30.32, SSIM = 0.6568\n",
      "Image sparseresidential45.png: PSNR = 36.47, SSIM = 0.9247\n",
      "Image sparseresidential64.png: PSNR = 30.43, SSIM = 0.7244\n",
      "Image sparseresidential67.png: PSNR = 30.33, SSIM = 0.7228\n",
      "Image sparseresidential70.png: PSNR = 31.03, SSIM = 0.7608\n",
      "Image sparseresidential71.png: PSNR = 30.10, SSIM = 0.6973\n",
      "Image sparseresidential72.png: PSNR = 30.81, SSIM = 0.7674\n",
      "Image sparseresidential81.png: PSNR = 32.30, SSIM = 0.8517\n",
      "Image sparseresidential82.png: PSNR = 32.55, SSIM = 0.8110\n",
      "Image sparseresidential92.png: PSNR = 30.71, SSIM = 0.7312\n",
      "Image sparseresidential95.png: PSNR = 31.54, SSIM = 0.8464\n",
      "Image storagetanks01.png: PSNR = 33.79, SSIM = 0.8753\n",
      "Image storagetanks02.png: PSNR = 33.51, SSIM = 0.8473\n",
      "Image storagetanks16.png: PSNR = 32.00, SSIM = 0.8437\n",
      "Image storagetanks24.png: PSNR = 31.98, SSIM = 0.7563\n",
      "Image storagetanks27.png: PSNR = 29.79, SSIM = 0.6303\n",
      "Image storagetanks29.png: PSNR = 29.67, SSIM = 0.5613\n",
      "Image storagetanks33.png: PSNR = 30.70, SSIM = 0.6657\n",
      "Image storagetanks36.png: PSNR = 30.34, SSIM = 0.6646\n",
      "Image storagetanks37.png: PSNR = 30.53, SSIM = 0.6598\n",
      "Image storagetanks41.png: PSNR = 29.69, SSIM = 0.6152\n",
      "Image storagetanks42.png: PSNR = 30.31, SSIM = 0.7514\n",
      "Image storagetanks43.png: PSNR = 30.46, SSIM = 0.6899\n",
      "Image storagetanks57.png: PSNR = 34.30, SSIM = 0.8479\n",
      "Image storagetanks67.png: PSNR = 35.96, SSIM = 0.9301\n",
      "Image storagetanks68.png: PSNR = 33.11, SSIM = 0.8862\n",
      "Image storagetanks69.png: PSNR = 33.70, SSIM = 0.8854\n",
      "Image storagetanks70.png: PSNR = 34.04, SSIM = 0.9006\n",
      "Image storagetanks87.png: PSNR = 36.78, SSIM = 0.9139\n",
      "Image storagetanks90.png: PSNR = 31.83, SSIM = 0.7780\n",
      "Image storagetanks91.png: PSNR = 31.14, SSIM = 0.7685\n",
      "Image tenniscourt05.png: PSNR = 30.96, SSIM = 0.7152\n",
      "Image tenniscourt13.png: PSNR = 30.57, SSIM = 0.6581\n",
      "Image tenniscourt18.png: PSNR = 33.15, SSIM = 0.8587\n",
      "Image tenniscourt19.png: PSNR = 32.68, SSIM = 0.8410\n",
      "Image tenniscourt23.png: PSNR = 34.79, SSIM = 0.8982\n",
      "Image tenniscourt24.png: PSNR = 32.58, SSIM = 0.8304\n",
      "Image tenniscourt25.png: PSNR = 31.72, SSIM = 0.7878\n",
      "Image tenniscourt26.png: PSNR = 31.62, SSIM = 0.8034\n",
      "Image tenniscourt27.png: PSNR = 31.87, SSIM = 0.8148\n",
      "Image tenniscourt37.png: PSNR = 31.16, SSIM = 0.6848\n",
      "Image tenniscourt38.png: PSNR = 31.00, SSIM = 0.6785\n",
      "Image tenniscourt44.png: PSNR = 31.24, SSIM = 0.6898\n",
      "Image tenniscourt52.png: PSNR = 33.11, SSIM = 0.8583\n",
      "Image tenniscourt60.png: PSNR = 34.00, SSIM = 0.8661\n",
      "Image tenniscourt63.png: PSNR = 33.16, SSIM = 0.8362\n",
      "Image tenniscourt81.png: PSNR = 36.26, SSIM = 0.9009\n",
      "Image tenniscourt85.png: PSNR = 33.67, SSIM = 0.8107\n",
      "Image tenniscourt88.png: PSNR = 33.18, SSIM = 0.8090\n",
      "Image tenniscourt93.png: PSNR = 33.20, SSIM = 0.8519\n",
      "Image tenniscourt95.png: PSNR = 33.56, SSIM = 0.8814\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "383ef7d7",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha=0.6\n",
      "Average PSNR: 31.80\n",
      "Average SSIM: 0.7549\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"alpha=0.6\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23dab05a",
   "metadata": {},
   "source": [
    "# Interpolating with alpha =  0.7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "198ae375",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interpolating with alpha =  0.7\n"
     ]
    }
   ],
   "source": [
    "#net_interp.py\n",
    "import sys\n",
    "import torch\n",
    "from collections import OrderedDict\n",
    "\n",
    "alpha =0.7\n",
    "\n",
    "net_PSNR_path = './models/RRDB_PSNR_x4.pth'\n",
    "net_ESRGAN_path = './models/RRDB_ESRGAN_x4.pth'\n",
    "net_interp_path = './models/interp_{:02d}.pth'.format(int(alpha*10))\n",
    "\n",
    "net_PSNR = torch.load(net_PSNR_path)\n",
    "net_ESRGAN = torch.load(net_ESRGAN_path)\n",
    "net_interp = OrderedDict()\n",
    "\n",
    "print('Interpolating with alpha = ', alpha)\n",
    "for k, v_PSNR in net_PSNR.items():\n",
    "    v_ESRGAN = net_ESRGAN[k]\n",
    "    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN\n",
    "\n",
    "torch.save(net_interp, net_interp_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "82a77ba2",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/interp_07.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "#test.py\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/interp_07.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "021e524e",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.35, SSIM = 0.0934\n",
      "Image agricultural12.png: PSNR = 30.84, SSIM = 0.8936\n",
      "Image agricultural27.png: PSNR = 28.75, SSIM = 0.2410\n",
      "Image agricultural28.png: PSNR = 28.78, SSIM = 0.2301\n",
      "Image agricultural33.png: PSNR = 30.71, SSIM = 0.4820\n",
      "Image agricultural39.png: PSNR = 32.33, SSIM = 0.8013\n",
      "Image agricultural54.png: PSNR = 31.87, SSIM = 0.6857\n",
      "Image agricultural55.png: PSNR = 36.41, SSIM = 0.8552\n",
      "Image agricultural60.png: PSNR = 30.67, SSIM = 0.7440\n",
      "Image agricultural61.png: PSNR = 33.58, SSIM = 0.9499\n",
      "Image agricultural62.png: PSNR = 28.62, SSIM = 0.2053\n",
      "Image agricultural63.png: PSNR = 30.17, SSIM = 0.4385\n",
      "Image agricultural67.png: PSNR = 27.85, SSIM = 0.1062\n",
      "Image agricultural69.png: PSNR = 27.76, SSIM = 0.1105\n",
      "Image agricultural72.png: PSNR = 27.89, SSIM = 0.1161\n",
      "Image agricultural74.png: PSNR = 29.16, SSIM = 0.4167\n",
      "Image agricultural76.png: PSNR = 30.09, SSIM = 0.7097\n",
      "Image agricultural83.png: PSNR = 28.25, SSIM = 0.1847\n",
      "Image agricultural84.png: PSNR = 28.13, SSIM = 0.1319\n",
      "Image agricultural85.png: PSNR = 28.05, SSIM = 0.1169\n",
      "Image airplane04.png: PSNR = 33.34, SSIM = 0.8833\n",
      "Image airplane09.png: PSNR = 33.15, SSIM = 0.8812\n",
      "Image airplane17.png: PSNR = 31.80, SSIM = 0.8119\n",
      "Image airplane25.png: PSNR = 33.93, SSIM = 0.8549\n",
      "Image airplane28.png: PSNR = 31.46, SSIM = 0.7161\n",
      "Image airplane29.png: PSNR = 31.52, SSIM = 0.7446\n",
      "Image airplane30.png: PSNR = 31.53, SSIM = 0.7655\n",
      "Image airplane32.png: PSNR = 32.38, SSIM = 0.7683\n",
      "Image airplane40.png: PSNR = 32.05, SSIM = 0.7934\n",
      "Image airplane48.png: PSNR = 30.60, SSIM = 0.7878\n",
      "Image airplane55.png: PSNR = 31.37, SSIM = 0.7935\n",
      "Image airplane65.png: PSNR = 30.68, SSIM = 0.7541\n",
      "Image airplane71.png: PSNR = 30.91, SSIM = 0.7571\n",
      "Image airplane74.png: PSNR = 33.18, SSIM = 0.8641\n",
      "Image airplane75.png: PSNR = 33.33, SSIM = 0.8681\n",
      "Image airplane80.png: PSNR = 36.11, SSIM = 0.9216\n",
      "Image airplane81.png: PSNR = 33.03, SSIM = 0.8326\n",
      "Image airplane85.png: PSNR = 33.53, SSIM = 0.8481\n",
      "Image airplane86.png: PSNR = 32.30, SSIM = 0.7620\n",
      "Image airplane87.png: PSNR = 31.02, SSIM = 0.7733\n",
      "Image baseballdiamond03.png: PSNR = 33.70, SSIM = 0.8063\n",
      "Image baseballdiamond04.png: PSNR = 32.63, SSIM = 0.7777\n",
      "Image baseballdiamond05.png: PSNR = 31.99, SSIM = 0.7575\n",
      "Image baseballdiamond13.png: PSNR = 31.30, SSIM = 0.7299\n",
      "Image baseballdiamond16.png: PSNR = 31.01, SSIM = 0.6491\n",
      "Image baseballdiamond24.png: PSNR = 32.42, SSIM = 0.7216\n",
      "Image baseballdiamond31.png: PSNR = 33.00, SSIM = 0.8418\n",
      "Image baseballdiamond32.png: PSNR = 36.65, SSIM = 0.9224\n",
      "Image baseballdiamond37.png: PSNR = 33.14, SSIM = 0.8441\n",
      "Image baseballdiamond40.png: PSNR = 32.92, SSIM = 0.8339\n",
      "Image baseballdiamond47.png: PSNR = 31.81, SSIM = 0.7807\n",
      "Image baseballdiamond50.png: PSNR = 32.34, SSIM = 0.8120\n",
      "Image baseballdiamond53.png: PSNR = 36.99, SSIM = 0.9270\n",
      "Image baseballdiamond58.png: PSNR = 34.28, SSIM = 0.8880\n",
      "Image baseballdiamond72.png: PSNR = 36.30, SSIM = 0.8973\n",
      "Image baseballdiamond74.png: PSNR = 36.43, SSIM = 0.9109\n",
      "Image baseballdiamond79.png: PSNR = 30.32, SSIM = 0.5716\n",
      "Image baseballdiamond81.png: PSNR = 33.58, SSIM = 0.8241\n",
      "Image baseballdiamond83.png: PSNR = 35.32, SSIM = 0.8407\n",
      "Image baseballdiamond96.png: PSNR = 34.45, SSIM = 0.8903\n",
      "Image beach02.png: PSNR = 31.73, SSIM = 0.7160\n",
      "Image beach11.png: PSNR = 37.73, SSIM = 0.9168\n",
      "Image beach13.png: PSNR = 39.74, SSIM = 0.9442\n",
      "Image beach16.png: PSNR = 42.87, SSIM = 0.9722\n",
      "Image beach19.png: PSNR = 35.96, SSIM = 0.9060\n",
      "Image beach26.png: PSNR = 38.61, SSIM = 0.9322\n",
      "Image beach46.png: PSNR = 33.82, SSIM = 0.8076\n",
      "Image beach50.png: PSNR = 36.29, SSIM = 0.9028\n",
      "Image beach54.png: PSNR = 36.63, SSIM = 0.9013\n",
      "Image beach60.png: PSNR = 33.81, SSIM = 0.8373\n",
      "Image beach72.png: PSNR = 34.02, SSIM = 0.8260\n",
      "Image beach73.png: PSNR = 31.60, SSIM = 0.6544\n",
      "Image beach76.png: PSNR = 37.95, SSIM = 0.9341\n",
      "Image beach85.png: PSNR = 36.87, SSIM = 0.9109\n",
      "Image beach86.png: PSNR = 37.46, SSIM = 0.9160\n",
      "Image beach88.png: PSNR = 37.40, SSIM = 0.9280\n",
      "Image beach89.png: PSNR = 38.45, SSIM = 0.9415\n",
      "Image beach94.png: PSNR = 33.03, SSIM = 0.8207\n",
      "Image beach97.png: PSNR = 33.10, SSIM = 0.8274\n",
      "Image beach99.png: PSNR = 33.12, SSIM = 0.8177\n",
      "Image buildings27.png: PSNR = 31.65, SSIM = 0.7536\n",
      "Image buildings32.png: PSNR = 30.77, SSIM = 0.7540\n",
      "Image buildings34.png: PSNR = 34.59, SSIM = 0.8976\n",
      "Image buildings35.png: PSNR = 32.34, SSIM = 0.8308\n",
      "Image buildings36.png: PSNR = 30.40, SSIM = 0.7340\n",
      "Image buildings44.png: PSNR = 30.08, SSIM = 0.7167\n",
      "Image buildings45.png: PSNR = 31.49, SSIM = 0.8062\n",
      "Image buildings46.png: PSNR = 30.46, SSIM = 0.7353\n",
      "Image buildings51.png: PSNR = 31.36, SSIM = 0.8014\n",
      "Image buildings52.png: PSNR = 37.08, SSIM = 0.9549\n",
      "Image buildings56.png: PSNR = 30.69, SSIM = 0.7342\n",
      "Image buildings63.png: PSNR = 31.74, SSIM = 0.8174\n",
      "Image buildings64.png: PSNR = 32.46, SSIM = 0.8626\n",
      "Image buildings65.png: PSNR = 34.71, SSIM = 0.8926\n",
      "Image buildings69.png: PSNR = 33.90, SSIM = 0.9060\n",
      "Image buildings73.png: PSNR = 32.93, SSIM = 0.8792\n",
      "Image buildings74.png: PSNR = 32.39, SSIM = 0.8442\n",
      "Image buildings79.png: PSNR = 29.73, SSIM = 0.6278\n",
      "Image buildings89.png: PSNR = 31.40, SSIM = 0.8026\n",
      "Image buildings93.png: PSNR = 30.84, SSIM = 0.7432\n",
      "Image chaparral09.png: PSNR = 30.09, SSIM = 0.7557\n",
      "Image chaparral15.png: PSNR = 30.97, SSIM = 0.8244\n",
      "Image chaparral17.png: PSNR = 32.35, SSIM = 0.8118\n",
      "Image chaparral23.png: PSNR = 30.04, SSIM = 0.7765\n",
      "Image chaparral26.png: PSNR = 30.00, SSIM = 0.7233\n",
      "Image chaparral33.png: PSNR = 30.93, SSIM = 0.8251\n",
      "Image chaparral37.png: PSNR = 30.68, SSIM = 0.8115\n",
      "Image chaparral42.png: PSNR = 29.20, SSIM = 0.5317\n",
      "Image chaparral43.png: PSNR = 30.51, SSIM = 0.7457\n",
      "Image chaparral50.png: PSNR = 29.89, SSIM = 0.7190\n",
      "Image chaparral55.png: PSNR = 29.98, SSIM = 0.7762\n",
      "Image chaparral61.png: PSNR = 28.21, SSIM = 0.2264\n",
      "Image chaparral63.png: PSNR = 28.16, SSIM = 0.1985\n",
      "Image chaparral64.png: PSNR = 28.09, SSIM = 0.2186\n",
      "Image chaparral68.png: PSNR = 30.51, SSIM = 0.8112\n",
      "Image chaparral71.png: PSNR = 30.11, SSIM = 0.7477\n",
      "Image chaparral80.png: PSNR = 29.73, SSIM = 0.6726\n",
      "Image chaparral83.png: PSNR = 29.46, SSIM = 0.6753\n",
      "Image chaparral88.png: PSNR = 31.31, SSIM = 0.8033\n",
      "Image chaparral99.png: PSNR = 29.52, SSIM = 0.7332\n",
      "Image denseresidential02.png: PSNR = 31.17, SSIM = 0.8512\n",
      "Image denseresidential12.png: PSNR = 31.31, SSIM = 0.8737\n",
      "Image denseresidential14.png: PSNR = 30.12, SSIM = 0.7587\n",
      "Image denseresidential15.png: PSNR = 30.12, SSIM = 0.7767\n",
      "Image denseresidential29.png: PSNR = 30.02, SSIM = 0.7243\n",
      "Image denseresidential31.png: PSNR = 30.58, SSIM = 0.7923\n",
      "Image denseresidential34.png: PSNR = 31.21, SSIM = 0.7467\n",
      "Image denseresidential38.png: PSNR = 30.42, SSIM = 0.7235\n",
      "Image denseresidential46.png: PSNR = 31.00, SSIM = 0.7980\n",
      "Image denseresidential53.png: PSNR = 30.50, SSIM = 0.7213\n",
      "Image denseresidential60.png: PSNR = 30.51, SSIM = 0.7822\n",
      "Image denseresidential64.png: PSNR = 30.99, SSIM = 0.8232\n",
      "Image denseresidential65.png: PSNR = 30.40, SSIM = 0.7462\n",
      "Image denseresidential68.png: PSNR = 30.46, SSIM = 0.7479\n",
      "Image denseresidential75.png: PSNR = 31.10, SSIM = 0.7935\n",
      "Image denseresidential88.png: PSNR = 31.55, SSIM = 0.7728\n",
      "Image denseresidential89.png: PSNR = 31.27, SSIM = 0.7518\n",
      "Image denseresidential91.png: PSNR = 31.81, SSIM = 0.8029\n",
      "Image denseresidential96.png: PSNR = 30.49, SSIM = 0.7406\n",
      "Image denseresidential97.png: PSNR = 30.72, SSIM = 0.7553\n",
      "Image forest08.png: PSNR = 29.89, SSIM = 0.5777\n",
      "Image forest09.png: PSNR = 29.69, SSIM = 0.5546\n",
      "Image forest10.png: PSNR = 32.27, SSIM = 0.7174\n",
      "Image forest11.png: PSNR = 31.13, SSIM = 0.6534\n",
      "Image forest12.png: PSNR = 30.91, SSIM = 0.6310\n",
      "Image forest19.png: PSNR = 28.85, SSIM = 0.4404\n",
      "Image forest20.png: PSNR = 28.54, SSIM = 0.4219\n",
      "Image forest29.png: PSNR = 30.14, SSIM = 0.6387\n",
      "Image forest34.png: PSNR = 30.07, SSIM = 0.6180\n",
      "Image forest39.png: PSNR = 30.39, SSIM = 0.6469\n",
      "Image forest45.png: PSNR = 30.84, SSIM = 0.7079\n",
      "Image forest53.png: PSNR = 30.75, SSIM = 0.7161\n",
      "Image forest56.png: PSNR = 29.98, SSIM = 0.6738\n",
      "Image forest62.png: PSNR = 31.03, SSIM = 0.8194\n",
      "Image forest69.png: PSNR = 29.53, SSIM = 0.5592\n",
      "Image forest73.png: PSNR = 29.17, SSIM = 0.4989\n",
      "Image forest74.png: PSNR = 29.81, SSIM = 0.5611\n",
      "Image forest80.png: PSNR = 30.42, SSIM = 0.6037\n",
      "Image forest84.png: PSNR = 29.45, SSIM = 0.5175\n",
      "Image forest93.png: PSNR = 29.19, SSIM = 0.4798\n",
      "Image freeway00.png: PSNR = 31.67, SSIM = 0.8609\n",
      "Image freeway03.png: PSNR = 31.82, SSIM = 0.8426\n",
      "Image freeway07.png: PSNR = 32.06, SSIM = 0.8800\n",
      "Image freeway09.png: PSNR = 33.41, SSIM = 0.9002\n",
      "Image freeway12.png: PSNR = 33.38, SSIM = 0.8878\n",
      "Image freeway25.png: PSNR = 31.48, SSIM = 0.7216\n",
      "Image freeway26.png: PSNR = 31.05, SSIM = 0.6711\n",
      "Image freeway44.png: PSNR = 30.31, SSIM = 0.6191\n",
      "Image freeway55.png: PSNR = 32.02, SSIM = 0.8351\n",
      "Image freeway64.png: PSNR = 31.37, SSIM = 0.8070\n",
      "Image freeway67.png: PSNR = 31.98, SSIM = 0.8339\n",
      "Image freeway71.png: PSNR = 33.05, SSIM = 0.8735\n",
      "Image freeway74.png: PSNR = 34.65, SSIM = 0.8998\n",
      "Image freeway75.png: PSNR = 34.57, SSIM = 0.9156\n",
      "Image freeway76.png: PSNR = 31.05, SSIM = 0.8017\n",
      "Image freeway77.png: PSNR = 32.48, SSIM = 0.8596\n",
      "Image freeway78.png: PSNR = 33.71, SSIM = 0.8848\n",
      "Image freeway87.png: PSNR = 28.72, SSIM = 0.4295\n",
      "Image freeway92.png: PSNR = 33.42, SSIM = 0.8538\n",
      "Image freeway93.png: PSNR = 30.55, SSIM = 0.6417\n",
      "Image golfcourse07.png: PSNR = 33.13, SSIM = 0.7820\n",
      "Image golfcourse08.png: PSNR = 32.53, SSIM = 0.7392\n",
      "Image golfcourse14.png: PSNR = 33.47, SSIM = 0.7995\n",
      "Image golfcourse17.png: PSNR = 34.64, SSIM = 0.8346\n",
      "Image golfcourse18.png: PSNR = 32.89, SSIM = 0.7739\n",
      "Image golfcourse19.png: PSNR = 31.42, SSIM = 0.7162\n",
      "Image golfcourse24.png: PSNR = 31.83, SSIM = 0.7590\n",
      "Image golfcourse27.png: PSNR = 31.65, SSIM = 0.6777\n",
      "Image golfcourse33.png: PSNR = 31.55, SSIM = 0.6609\n",
      "Image golfcourse35.png: PSNR = 31.91, SSIM = 0.7020\n",
      "Image golfcourse45.png: PSNR = 35.39, SSIM = 0.8690\n",
      "Image golfcourse50.png: PSNR = 33.33, SSIM = 0.8003\n",
      "Image golfcourse52.png: PSNR = 32.03, SSIM = 0.7417\n",
      "Image golfcourse73.png: PSNR = 35.79, SSIM = 0.8982\n",
      "Image golfcourse76.png: PSNR = 32.88, SSIM = 0.8127\n",
      "Image golfcourse77.png: PSNR = 33.43, SSIM = 0.8294\n",
      "Image golfcourse78.png: PSNR = 33.75, SSIM = 0.8456\n",
      "Image golfcourse81.png: PSNR = 32.35, SSIM = 0.7667\n",
      "Image golfcourse82.png: PSNR = 32.01, SSIM = 0.7765\n",
      "Image golfcourse85.png: PSNR = 31.82, SSIM = 0.7604\n",
      "Image harbor00.png: PSNR = 31.94, SSIM = 0.8509\n",
      "Image harbor05.png: PSNR = 30.54, SSIM = 0.7740\n",
      "Image harbor13.png: PSNR = 29.78, SSIM = 0.7477\n",
      "Image harbor14.png: PSNR = 29.90, SSIM = 0.7412\n",
      "Image harbor15.png: PSNR = 30.01, SSIM = 0.7449\n",
      "Image harbor19.png: PSNR = 30.76, SSIM = 0.7920\n",
      "Image harbor22.png: PSNR = 31.80, SSIM = 0.8743\n",
      "Image harbor24.png: PSNR = 30.94, SSIM = 0.8577\n",
      "Image harbor32.png: PSNR = 33.19, SSIM = 0.8693\n",
      "Image harbor33.png: PSNR = 32.87, SSIM = 0.8587\n",
      "Image harbor35.png: PSNR = 31.41, SSIM = 0.8168\n",
      "Image harbor49.png: PSNR = 31.02, SSIM = 0.8204\n",
      "Image harbor61.png: PSNR = 30.04, SSIM = 0.7557\n",
      "Image harbor65.png: PSNR = 30.43, SSIM = 0.7432\n",
      "Image harbor67.png: PSNR = 31.30, SSIM = 0.8636\n",
      "Image harbor68.png: PSNR = 31.93, SSIM = 0.8896\n",
      "Image harbor75.png: PSNR = 31.93, SSIM = 0.8414\n",
      "Image harbor81.png: PSNR = 32.42, SSIM = 0.8805\n",
      "Image harbor83.png: PSNR = 30.22, SSIM = 0.7535\n",
      "Image harbor88.png: PSNR = 30.78, SSIM = 0.7596\n",
      "Image intersection00.png: PSNR = 31.85, SSIM = 0.8509\n",
      "Image intersection10.png: PSNR = 31.52, SSIM = 0.8268\n",
      "Image intersection16.png: PSNR = 32.65, SSIM = 0.7888\n",
      "Image intersection19.png: PSNR = 31.43, SSIM = 0.7887\n",
      "Image intersection26.png: PSNR = 32.08, SSIM = 0.7562\n",
      "Image intersection28.png: PSNR = 31.44, SSIM = 0.7685\n",
      "Image intersection29.png: PSNR = 31.31, SSIM = 0.7433\n",
      "Image intersection30.png: PSNR = 30.88, SSIM = 0.7353\n",
      "Image intersection32.png: PSNR = 31.12, SSIM = 0.7514\n",
      "Image intersection40.png: PSNR = 30.63, SSIM = 0.7261\n",
      "Image intersection43.png: PSNR = 30.22, SSIM = 0.7064\n",
      "Image intersection44.png: PSNR = 31.46, SSIM = 0.7654\n",
      "Image intersection50.png: PSNR = 32.19, SSIM = 0.7718\n",
      "Image intersection52.png: PSNR = 32.00, SSIM = 0.7696\n",
      "Image intersection70.png: PSNR = 32.30, SSIM = 0.8587\n",
      "Image intersection76.png: PSNR = 34.52, SSIM = 0.9085\n",
      "Image intersection77.png: PSNR = 33.99, SSIM = 0.8894\n",
      "Image intersection87.png: PSNR = 32.05, SSIM = 0.7688\n",
      "Image intersection89.png: PSNR = 31.37, SSIM = 0.7310\n",
      "Image intersection99.png: PSNR = 31.14, SSIM = 0.7296\n",
      "Image mediumresidential15.png: PSNR = 30.01, SSIM = 0.6529\n",
      "Image mediumresidential19.png: PSNR = 31.07, SSIM = 0.7222\n",
      "Image mediumresidential34.png: PSNR = 30.61, SSIM = 0.7742\n",
      "Image mediumresidential40.png: PSNR = 30.66, SSIM = 0.7316\n",
      "Image mediumresidential44.png: PSNR = 30.55, SSIM = 0.7257\n",
      "Image mediumresidential49.png: PSNR = 30.53, SSIM = 0.7126\n",
      "Image mediumresidential52.png: PSNR = 30.98, SSIM = 0.7366\n",
      "Image mediumresidential53.png: PSNR = 30.82, SSIM = 0.7520\n",
      "Image mediumresidential73.png: PSNR = 29.16, SSIM = 0.5773\n",
      "Image mediumresidential76.png: PSNR = 33.48, SSIM = 0.8992\n",
      "Image mediumresidential77.png: PSNR = 33.94, SSIM = 0.8934\n",
      "Image mediumresidential78.png: PSNR = 34.40, SSIM = 0.9075\n",
      "Image mediumresidential79.png: PSNR = 34.41, SSIM = 0.9051\n",
      "Image mediumresidential80.png: PSNR = 34.06, SSIM = 0.8869\n",
      "Image mediumresidential81.png: PSNR = 29.79, SSIM = 0.6943\n",
      "Image mediumresidential83.png: PSNR = 30.13, SSIM = 0.7276\n",
      "Image mediumresidential86.png: PSNR = 30.27, SSIM = 0.6825\n",
      "Image mediumresidential89.png: PSNR = 33.30, SSIM = 0.8516\n",
      "Image mediumresidential93.png: PSNR = 32.33, SSIM = 0.8153\n",
      "Image mediumresidential97.png: PSNR = 30.87, SSIM = 0.7646\n",
      "Image mobilehomepark03.png: PSNR = 30.06, SSIM = 0.6979\n",
      "Image mobilehomepark04.png: PSNR = 30.71, SSIM = 0.7276\n",
      "Image mobilehomepark05.png: PSNR = 30.56, SSIM = 0.7607\n",
      "Image mobilehomepark16.png: PSNR = 30.62, SSIM = 0.7581\n",
      "Image mobilehomepark29.png: PSNR = 31.50, SSIM = 0.8423\n",
      "Image mobilehomepark48.png: PSNR = 31.08, SSIM = 0.8285\n",
      "Image mobilehomepark49.png: PSNR = 31.65, SSIM = 0.8585\n",
      "Image mobilehomepark50.png: PSNR = 31.19, SSIM = 0.8321\n",
      "Image mobilehomepark54.png: PSNR = 32.38, SSIM = 0.8743\n",
      "Image mobilehomepark57.png: PSNR = 31.87, SSIM = 0.8529\n",
      "Image mobilehomepark59.png: PSNR = 31.03, SSIM = 0.8175\n",
      "Image mobilehomepark61.png: PSNR = 32.22, SSIM = 0.8840\n",
      "Image mobilehomepark63.png: PSNR = 32.01, SSIM = 0.8656\n",
      "Image mobilehomepark64.png: PSNR = 31.65, SSIM = 0.8610\n",
      "Image mobilehomepark77.png: PSNR = 29.94, SSIM = 0.6829\n",
      "Image mobilehomepark80.png: PSNR = 28.95, SSIM = 0.6038\n",
      "Image mobilehomepark83.png: PSNR = 28.85, SSIM = 0.5752\n",
      "Image mobilehomepark84.png: PSNR = 28.66, SSIM = 0.5103\n",
      "Image mobilehomepark93.png: PSNR = 28.96, SSIM = 0.6159\n",
      "Image mobilehomepark95.png: PSNR = 28.65, SSIM = 0.5120\n",
      "Image overpass00.png: PSNR = 31.29, SSIM = 0.7932\n",
      "Image overpass09.png: PSNR = 31.02, SSIM = 0.8163\n",
      "Image overpass18.png: PSNR = 32.70, SSIM = 0.8335\n",
      "Image overpass19.png: PSNR = 31.97, SSIM = 0.8080\n",
      "Image overpass27.png: PSNR = 29.52, SSIM = 0.5624\n",
      "Image overpass40.png: PSNR = 30.61, SSIM = 0.6900\n",
      "Image overpass54.png: PSNR = 29.77, SSIM = 0.6249\n",
      "Image overpass56.png: PSNR = 32.77, SSIM = 0.8409\n",
      "Image overpass58.png: PSNR = 31.24, SSIM = 0.7558\n",
      "Image overpass63.png: PSNR = 30.90, SSIM = 0.7523\n",
      "Image overpass66.png: PSNR = 32.19, SSIM = 0.7653\n",
      "Image overpass72.png: PSNR = 30.04, SSIM = 0.6158\n",
      "Image overpass73.png: PSNR = 30.48, SSIM = 0.6754\n",
      "Image overpass76.png: PSNR = 30.64, SSIM = 0.7144\n",
      "Image overpass80.png: PSNR = 30.89, SSIM = 0.6913\n",
      "Image overpass85.png: PSNR = 30.37, SSIM = 0.6440\n",
      "Image overpass90.png: PSNR = 29.59, SSIM = 0.5975\n",
      "Image overpass91.png: PSNR = 30.42, SSIM = 0.6904\n",
      "Image overpass93.png: PSNR = 31.76, SSIM = 0.8000\n",
      "Image overpass95.png: PSNR = 31.51, SSIM = 0.7895\n",
      "Image parkinglot15.png: PSNR = 30.30, SSIM = 0.7903\n",
      "Image parkinglot18.png: PSNR = 31.50, SSIM = 0.8352\n",
      "Image parkinglot24.png: PSNR = 30.01, SSIM = 0.7134\n",
      "Image parkinglot40.png: PSNR = 30.36, SSIM = 0.7102\n",
      "Image parkinglot46.png: PSNR = 30.02, SSIM = 0.6710\n",
      "Image parkinglot52.png: PSNR = 30.91, SSIM = 0.7312\n",
      "Image parkinglot54.png: PSNR = 30.40, SSIM = 0.7350\n",
      "Image parkinglot61.png: PSNR = 30.58, SSIM = 0.7036\n",
      "Image parkinglot63.png: PSNR = 30.39, SSIM = 0.7426\n",
      "Image parkinglot64.png: PSNR = 30.55, SSIM = 0.7118\n",
      "Image parkinglot70.png: PSNR = 30.05, SSIM = 0.7119\n",
      "Image parkinglot71.png: PSNR = 29.92, SSIM = 0.7243\n",
      "Image parkinglot76.png: PSNR = 30.43, SSIM = 0.7109\n",
      "Image parkinglot82.png: PSNR = 31.07, SSIM = 0.8203\n",
      "Image parkinglot83.png: PSNR = 30.47, SSIM = 0.7934\n",
      "Image parkinglot93.png: PSNR = 30.24, SSIM = 0.6384\n",
      "Image parkinglot95.png: PSNR = 30.41, SSIM = 0.6494\n",
      "Image parkinglot96.png: PSNR = 30.19, SSIM = 0.6186\n",
      "Image parkinglot97.png: PSNR = 30.40, SSIM = 0.7816\n",
      "Image parkinglot99.png: PSNR = 31.03, SSIM = 0.7970\n",
      "Image river04.png: PSNR = 29.49, SSIM = 0.5422\n",
      "Image river11.png: PSNR = 29.73, SSIM = 0.5536\n",
      "Image river13.png: PSNR = 29.88, SSIM = 0.6059\n",
      "Image river16.png: PSNR = 30.56, SSIM = 0.6589\n",
      "Image river17.png: PSNR = 30.93, SSIM = 0.6778\n",
      "Image river23.png: PSNR = 30.11, SSIM = 0.5744\n",
      "Image river31.png: PSNR = 30.13, SSIM = 0.5502\n",
      "Image river33.png: PSNR = 29.39, SSIM = 0.4874\n",
      "Image river36.png: PSNR = 30.72, SSIM = 0.7129\n",
      "Image river45.png: PSNR = 30.37, SSIM = 0.6659\n",
      "Image river51.png: PSNR = 32.18, SSIM = 0.8008\n",
      "Image river66.png: PSNR = 28.96, SSIM = 0.4537\n",
      "Image river76.png: PSNR = 35.73, SSIM = 0.8784\n",
      "Image river80.png: PSNR = 31.82, SSIM = 0.7545\n",
      "Image river86.png: PSNR = 31.75, SSIM = 0.7389\n",
      "Image river89.png: PSNR = 32.15, SSIM = 0.7297\n",
      "Image river92.png: PSNR = 32.53, SSIM = 0.7574\n",
      "Image river93.png: PSNR = 31.13, SSIM = 0.6565\n",
      "Image river94.png: PSNR = 30.02, SSIM = 0.5486\n",
      "Image river99.png: PSNR = 34.72, SSIM = 0.8700\n",
      "Image runway04.png: PSNR = 33.11, SSIM = 0.8233\n",
      "Image runway07.png: PSNR = 32.77, SSIM = 0.7770\n",
      "Image runway08.png: PSNR = 32.42, SSIM = 0.7594\n",
      "Image runway11.png: PSNR = 32.87, SSIM = 0.7890\n",
      "Image runway12.png: PSNR = 32.79, SSIM = 0.7732\n",
      "Image runway16.png: PSNR = 33.26, SSIM = 0.8172\n",
      "Image runway31.png: PSNR = 34.03, SSIM = 0.8628\n",
      "Image runway39.png: PSNR = 32.90, SSIM = 0.7799\n",
      "Image runway41.png: PSNR = 32.29, SSIM = 0.7895\n",
      "Image runway42.png: PSNR = 32.29, SSIM = 0.7728\n",
      "Image runway43.png: PSNR = 32.70, SSIM = 0.7987\n",
      "Image runway56.png: PSNR = 32.58, SSIM = 0.8004\n",
      "Image runway66.png: PSNR = 32.10, SSIM = 0.7447\n",
      "Image runway67.png: PSNR = 30.98, SSIM = 0.6586\n",
      "Image runway72.png: PSNR = 35.13, SSIM = 0.8853\n",
      "Image runway74.png: PSNR = 34.33, SSIM = 0.8753\n",
      "Image runway76.png: PSNR = 34.96, SSIM = 0.8786\n",
      "Image runway82.png: PSNR = 33.29, SSIM = 0.8244\n",
      "Image runway83.png: PSNR = 32.94, SSIM = 0.8248\n",
      "Image runway95.png: PSNR = 34.83, SSIM = 0.8499\n",
      "Image sparseresidential00.png: PSNR = 30.46, SSIM = 0.6763\n",
      "Image sparseresidential01.png: PSNR = 30.88, SSIM = 0.6834\n",
      "Image sparseresidential04.png: PSNR = 30.28, SSIM = 0.6219\n",
      "Image sparseresidential07.png: PSNR = 29.41, SSIM = 0.5502\n",
      "Image sparseresidential09.png: PSNR = 29.31, SSIM = 0.5314\n",
      "Image sparseresidential11.png: PSNR = 29.56, SSIM = 0.6163\n",
      "Image sparseresidential23.png: PSNR = 30.02, SSIM = 0.5897\n",
      "Image sparseresidential28.png: PSNR = 30.59, SSIM = 0.6543\n",
      "Image sparseresidential33.png: PSNR = 30.39, SSIM = 0.6196\n",
      "Image sparseresidential41.png: PSNR = 30.28, SSIM = 0.6499\n",
      "Image sparseresidential45.png: PSNR = 36.40, SSIM = 0.9196\n",
      "Image sparseresidential64.png: PSNR = 30.30, SSIM = 0.7033\n",
      "Image sparseresidential67.png: PSNR = 30.19, SSIM = 0.7000\n",
      "Image sparseresidential70.png: PSNR = 30.87, SSIM = 0.7409\n",
      "Image sparseresidential71.png: PSNR = 29.93, SSIM = 0.6664\n",
      "Image sparseresidential72.png: PSNR = 30.65, SSIM = 0.7451\n",
      "Image sparseresidential81.png: PSNR = 32.26, SSIM = 0.8439\n",
      "Image sparseresidential82.png: PSNR = 32.56, SSIM = 0.8057\n",
      "Image sparseresidential92.png: PSNR = 30.69, SSIM = 0.7246\n",
      "Image sparseresidential95.png: PSNR = 31.43, SSIM = 0.8363\n",
      "Image storagetanks01.png: PSNR = 33.75, SSIM = 0.8696\n",
      "Image storagetanks02.png: PSNR = 33.48, SSIM = 0.8409\n",
      "Image storagetanks16.png: PSNR = 31.90, SSIM = 0.8354\n",
      "Image storagetanks24.png: PSNR = 31.95, SSIM = 0.7489\n",
      "Image storagetanks27.png: PSNR = 29.62, SSIM = 0.6043\n",
      "Image storagetanks29.png: PSNR = 29.54, SSIM = 0.5207\n",
      "Image storagetanks33.png: PSNR = 30.50, SSIM = 0.6394\n",
      "Image storagetanks36.png: PSNR = 30.20, SSIM = 0.6453\n",
      "Image storagetanks37.png: PSNR = 30.33, SSIM = 0.6317\n",
      "Image storagetanks41.png: PSNR = 29.55, SSIM = 0.5881\n",
      "Image storagetanks42.png: PSNR = 30.19, SSIM = 0.7363\n",
      "Image storagetanks43.png: PSNR = 30.34, SSIM = 0.6725\n",
      "Image storagetanks57.png: PSNR = 34.15, SSIM = 0.8383\n",
      "Image storagetanks67.png: PSNR = 35.89, SSIM = 0.9263\n",
      "Image storagetanks68.png: PSNR = 33.04, SSIM = 0.8801\n",
      "Image storagetanks69.png: PSNR = 33.67, SSIM = 0.8814\n",
      "Image storagetanks70.png: PSNR = 33.95, SSIM = 0.8962\n",
      "Image storagetanks87.png: PSNR = 36.80, SSIM = 0.9110\n",
      "Image storagetanks90.png: PSNR = 31.80, SSIM = 0.7714\n",
      "Image storagetanks91.png: PSNR = 31.13, SSIM = 0.7632\n",
      "Image tenniscourt05.png: PSNR = 30.90, SSIM = 0.7080\n",
      "Image tenniscourt13.png: PSNR = 30.50, SSIM = 0.6478\n",
      "Image tenniscourt18.png: PSNR = 33.06, SSIM = 0.8523\n",
      "Image tenniscourt19.png: PSNR = 32.57, SSIM = 0.8326\n",
      "Image tenniscourt23.png: PSNR = 34.69, SSIM = 0.8927\n",
      "Image tenniscourt24.png: PSNR = 32.49, SSIM = 0.8216\n",
      "Image tenniscourt25.png: PSNR = 31.62, SSIM = 0.7763\n",
      "Image tenniscourt26.png: PSNR = 31.48, SSIM = 0.7886\n",
      "Image tenniscourt27.png: PSNR = 31.74, SSIM = 0.8035\n",
      "Image tenniscourt37.png: PSNR = 31.04, SSIM = 0.6678\n",
      "Image tenniscourt38.png: PSNR = 30.89, SSIM = 0.6637\n",
      "Image tenniscourt44.png: PSNR = 31.12, SSIM = 0.6747\n",
      "Image tenniscourt52.png: PSNR = 32.97, SSIM = 0.8506\n",
      "Image tenniscourt60.png: PSNR = 33.91, SSIM = 0.8600\n",
      "Image tenniscourt63.png: PSNR = 33.06, SSIM = 0.8298\n",
      "Image tenniscourt81.png: PSNR = 36.26, SSIM = 0.8964\n",
      "Image tenniscourt85.png: PSNR = 33.56, SSIM = 0.8028\n",
      "Image tenniscourt88.png: PSNR = 33.07, SSIM = 0.8021\n",
      "Image tenniscourt93.png: PSNR = 33.11, SSIM = 0.8437\n",
      "Image tenniscourt95.png: PSNR = 33.48, SSIM = 0.8767\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "b383e0d8",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha=0.7\n",
      "Average PSNR: 31.72\n",
      "Average SSIM: 0.7440\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"alpha=0.7\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26ffbb76",
   "metadata": {},
   "source": [
    "# Interpolating with alpha =  0.8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "57ccfb79",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interpolating with alpha =  0.8\n"
     ]
    }
   ],
   "source": [
    "#net_interp.py\n",
    "import sys\n",
    "import torch\n",
    "from collections import OrderedDict\n",
    "\n",
    "alpha =0.8\n",
    "\n",
    "net_PSNR_path = './models/RRDB_PSNR_x4.pth'\n",
    "net_ESRGAN_path = './models/RRDB_ESRGAN_x4.pth'\n",
    "net_interp_path = './models/interp_{:02d}.pth'.format(int(alpha*10))\n",
    "\n",
    "net_PSNR = torch.load(net_PSNR_path)\n",
    "net_ESRGAN = torch.load(net_ESRGAN_path)\n",
    "net_interp = OrderedDict()\n",
    "\n",
    "print('Interpolating with alpha = ', alpha)\n",
    "for k, v_PSNR in net_PSNR.items():\n",
    "    v_ESRGAN = net_ESRGAN[k]\n",
    "    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN\n",
    "\n",
    "torch.save(net_interp, net_interp_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "41df7ac2",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/interp_08.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "#test.py\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/interp_08.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "482d5609",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.36, SSIM = 0.0956\n",
      "Image agricultural12.png: PSNR = 30.30, SSIM = 0.8544\n",
      "Image agricultural27.png: PSNR = 28.74, SSIM = 0.2337\n",
      "Image agricultural28.png: PSNR = 28.78, SSIM = 0.2219\n",
      "Image agricultural33.png: PSNR = 30.59, SSIM = 0.4654\n",
      "Image agricultural39.png: PSNR = 31.98, SSIM = 0.7829\n",
      "Image agricultural54.png: PSNR = 31.78, SSIM = 0.6738\n",
      "Image agricultural55.png: PSNR = 36.32, SSIM = 0.8442\n",
      "Image agricultural60.png: PSNR = 30.56, SSIM = 0.7241\n",
      "Image agricultural61.png: PSNR = 33.24, SSIM = 0.9427\n",
      "Image agricultural62.png: PSNR = 28.66, SSIM = 0.2015\n",
      "Image agricultural63.png: PSNR = 30.20, SSIM = 0.4298\n",
      "Image agricultural67.png: PSNR = 27.85, SSIM = 0.1076\n",
      "Image agricultural69.png: PSNR = 27.77, SSIM = 0.1080\n",
      "Image agricultural72.png: PSNR = 27.90, SSIM = 0.1174\n",
      "Image agricultural74.png: PSNR = 29.16, SSIM = 0.4003\n",
      "Image agricultural76.png: PSNR = 29.91, SSIM = 0.6830\n",
      "Image agricultural83.png: PSNR = 28.25, SSIM = 0.1824\n",
      "Image agricultural84.png: PSNR = 28.12, SSIM = 0.1316\n",
      "Image agricultural85.png: PSNR = 28.06, SSIM = 0.1175\n",
      "Image airplane04.png: PSNR = 33.21, SSIM = 0.8736\n",
      "Image airplane09.png: PSNR = 33.03, SSIM = 0.8737\n",
      "Image airplane17.png: PSNR = 31.65, SSIM = 0.7982\n",
      "Image airplane25.png: PSNR = 33.85, SSIM = 0.8474\n",
      "Image airplane28.png: PSNR = 31.36, SSIM = 0.7022\n",
      "Image airplane29.png: PSNR = 31.46, SSIM = 0.7331\n",
      "Image airplane30.png: PSNR = 31.47, SSIM = 0.7554\n",
      "Image airplane32.png: PSNR = 32.27, SSIM = 0.7537\n",
      "Image airplane40.png: PSNR = 31.73, SSIM = 0.7644\n",
      "Image airplane48.png: PSNR = 30.45, SSIM = 0.7697\n",
      "Image airplane55.png: PSNR = 31.14, SSIM = 0.7722\n",
      "Image airplane65.png: PSNR = 30.51, SSIM = 0.7322\n",
      "Image airplane71.png: PSNR = 30.67, SSIM = 0.7262\n",
      "Image airplane74.png: PSNR = 33.11, SSIM = 0.8568\n",
      "Image airplane75.png: PSNR = 33.26, SSIM = 0.8599\n",
      "Image airplane80.png: PSNR = 36.17, SSIM = 0.9178\n",
      "Image airplane81.png: PSNR = 32.95, SSIM = 0.8234\n",
      "Image airplane85.png: PSNR = 33.46, SSIM = 0.8393\n",
      "Image airplane86.png: PSNR = 32.25, SSIM = 0.7500\n",
      "Image airplane87.png: PSNR = 30.97, SSIM = 0.7647\n",
      "Image baseballdiamond03.png: PSNR = 33.40, SSIM = 0.7843\n",
      "Image baseballdiamond04.png: PSNR = 32.40, SSIM = 0.7535\n",
      "Image baseballdiamond05.png: PSNR = 31.76, SSIM = 0.7317\n",
      "Image baseballdiamond13.png: PSNR = 31.07, SSIM = 0.6985\n",
      "Image baseballdiamond16.png: PSNR = 30.91, SSIM = 0.6314\n",
      "Image baseballdiamond24.png: PSNR = 32.32, SSIM = 0.7068\n",
      "Image baseballdiamond31.png: PSNR = 32.90, SSIM = 0.8279\n",
      "Image baseballdiamond32.png: PSNR = 36.68, SSIM = 0.9162\n",
      "Image baseballdiamond37.png: PSNR = 32.99, SSIM = 0.8309\n",
      "Image baseballdiamond40.png: PSNR = 32.80, SSIM = 0.8210\n",
      "Image baseballdiamond47.png: PSNR = 31.68, SSIM = 0.7634\n",
      "Image baseballdiamond50.png: PSNR = 32.17, SSIM = 0.7940\n",
      "Image baseballdiamond53.png: PSNR = 36.98, SSIM = 0.9208\n",
      "Image baseballdiamond58.png: PSNR = 34.15, SSIM = 0.8791\n",
      "Image baseballdiamond72.png: PSNR = 36.20, SSIM = 0.8863\n",
      "Image baseballdiamond74.png: PSNR = 36.35, SSIM = 0.9008\n",
      "Image baseballdiamond79.png: PSNR = 30.20, SSIM = 0.5469\n",
      "Image baseballdiamond81.png: PSNR = 33.41, SSIM = 0.8119\n",
      "Image baseballdiamond83.png: PSNR = 35.15, SSIM = 0.8297\n",
      "Image baseballdiamond96.png: PSNR = 34.35, SSIM = 0.8821\n",
      "Image beach02.png: PSNR = 31.65, SSIM = 0.6990\n",
      "Image beach11.png: PSNR = 37.56, SSIM = 0.9097\n",
      "Image beach13.png: PSNR = 39.57, SSIM = 0.9382\n",
      "Image beach16.png: PSNR = 42.78, SSIM = 0.9691\n",
      "Image beach19.png: PSNR = 35.92, SSIM = 0.8991\n",
      "Image beach26.png: PSNR = 38.51, SSIM = 0.9253\n",
      "Image beach46.png: PSNR = 33.73, SSIM = 0.7970\n",
      "Image beach50.png: PSNR = 36.21, SSIM = 0.8970\n",
      "Image beach54.png: PSNR = 36.40, SSIM = 0.8928\n",
      "Image beach60.png: PSNR = 33.54, SSIM = 0.8179\n",
      "Image beach72.png: PSNR = 33.84, SSIM = 0.8107\n",
      "Image beach73.png: PSNR = 31.49, SSIM = 0.6425\n",
      "Image beach76.png: PSNR = 37.94, SSIM = 0.9270\n",
      "Image beach85.png: PSNR = 36.83, SSIM = 0.8967\n",
      "Image beach86.png: PSNR = 37.58, SSIM = 0.9067\n",
      "Image beach88.png: PSNR = 37.55, SSIM = 0.9203\n",
      "Image beach89.png: PSNR = 38.75, SSIM = 0.9345\n",
      "Image beach94.png: PSNR = 32.79, SSIM = 0.8000\n",
      "Image beach97.png: PSNR = 32.88, SSIM = 0.8084\n",
      "Image beach99.png: PSNR = 32.87, SSIM = 0.7963\n",
      "Image buildings27.png: PSNR = 31.55, SSIM = 0.7416\n",
      "Image buildings32.png: PSNR = 30.51, SSIM = 0.7180\n",
      "Image buildings34.png: PSNR = 34.49, SSIM = 0.8918\n",
      "Image buildings35.png: PSNR = 32.21, SSIM = 0.8210\n",
      "Image buildings36.png: PSNR = 30.21, SSIM = 0.7072\n",
      "Image buildings44.png: PSNR = 29.92, SSIM = 0.6928\n",
      "Image buildings45.png: PSNR = 31.38, SSIM = 0.7926\n",
      "Image buildings46.png: PSNR = 30.30, SSIM = 0.7155\n",
      "Image buildings51.png: PSNR = 31.22, SSIM = 0.7848\n",
      "Image buildings52.png: PSNR = 37.05, SSIM = 0.9523\n",
      "Image buildings56.png: PSNR = 30.48, SSIM = 0.7058\n",
      "Image buildings63.png: PSNR = 31.63, SSIM = 0.8073\n",
      "Image buildings64.png: PSNR = 32.24, SSIM = 0.8462\n",
      "Image buildings65.png: PSNR = 34.48, SSIM = 0.8806\n",
      "Image buildings69.png: PSNR = 33.76, SSIM = 0.8992\n",
      "Image buildings73.png: PSNR = 32.76, SSIM = 0.8708\n",
      "Image buildings74.png: PSNR = 32.21, SSIM = 0.8319\n",
      "Image buildings79.png: PSNR = 29.64, SSIM = 0.6106\n",
      "Image buildings89.png: PSNR = 31.26, SSIM = 0.7868\n",
      "Image buildings93.png: PSNR = 30.64, SSIM = 0.7204\n",
      "Image chaparral09.png: PSNR = 30.06, SSIM = 0.7466\n",
      "Image chaparral15.png: PSNR = 30.90, SSIM = 0.8133\n",
      "Image chaparral17.png: PSNR = 32.27, SSIM = 0.8002\n",
      "Image chaparral23.png: PSNR = 29.98, SSIM = 0.7665\n",
      "Image chaparral26.png: PSNR = 29.95, SSIM = 0.7108\n",
      "Image chaparral33.png: PSNR = 30.84, SSIM = 0.8135\n",
      "Image chaparral37.png: PSNR = 30.62, SSIM = 0.8033\n",
      "Image chaparral42.png: PSNR = 29.12, SSIM = 0.5080\n",
      "Image chaparral43.png: PSNR = 30.50, SSIM = 0.7378\n",
      "Image chaparral50.png: PSNR = 29.81, SSIM = 0.7046\n",
      "Image chaparral55.png: PSNR = 29.93, SSIM = 0.7668\n",
      "Image chaparral61.png: PSNR = 28.17, SSIM = 0.2064\n",
      "Image chaparral63.png: PSNR = 28.15, SSIM = 0.1874\n",
      "Image chaparral64.png: PSNR = 28.08, SSIM = 0.2055\n",
      "Image chaparral68.png: PSNR = 30.43, SSIM = 0.8015\n",
      "Image chaparral71.png: PSNR = 30.05, SSIM = 0.7336\n",
      "Image chaparral80.png: PSNR = 29.64, SSIM = 0.6579\n",
      "Image chaparral83.png: PSNR = 29.41, SSIM = 0.6664\n",
      "Image chaparral88.png: PSNR = 31.24, SSIM = 0.7947\n",
      "Image chaparral99.png: PSNR = 29.48, SSIM = 0.7190\n",
      "Image denseresidential02.png: PSNR = 31.08, SSIM = 0.8416\n",
      "Image denseresidential12.png: PSNR = 31.22, SSIM = 0.8648\n",
      "Image denseresidential14.png: PSNR = 29.91, SSIM = 0.7261\n",
      "Image denseresidential15.png: PSNR = 29.98, SSIM = 0.7533\n",
      "Image denseresidential29.png: PSNR = 29.83, SSIM = 0.6887\n",
      "Image denseresidential31.png: PSNR = 30.42, SSIM = 0.7699\n",
      "Image denseresidential34.png: PSNR = 31.11, SSIM = 0.7336\n",
      "Image denseresidential38.png: PSNR = 30.35, SSIM = 0.7103\n",
      "Image denseresidential46.png: PSNR = 30.86, SSIM = 0.7883\n",
      "Image denseresidential53.png: PSNR = 30.31, SSIM = 0.6976\n",
      "Image denseresidential60.png: PSNR = 30.26, SSIM = 0.7553\n",
      "Image denseresidential64.png: PSNR = 30.84, SSIM = 0.8107\n",
      "Image denseresidential65.png: PSNR = 30.20, SSIM = 0.7217\n",
      "Image denseresidential68.png: PSNR = 30.30, SSIM = 0.7254\n",
      "Image denseresidential75.png: PSNR = 30.95, SSIM = 0.7796\n",
      "Image denseresidential88.png: PSNR = 31.47, SSIM = 0.7615\n",
      "Image denseresidential89.png: PSNR = 31.17, SSIM = 0.7396\n",
      "Image denseresidential91.png: PSNR = 31.69, SSIM = 0.7888\n",
      "Image denseresidential96.png: PSNR = 30.41, SSIM = 0.7281\n",
      "Image denseresidential97.png: PSNR = 30.66, SSIM = 0.7442\n",
      "Image forest08.png: PSNR = 29.69, SSIM = 0.5378\n",
      "Image forest09.png: PSNR = 29.56, SSIM = 0.5235\n",
      "Image forest10.png: PSNR = 32.11, SSIM = 0.7002\n",
      "Image forest11.png: PSNR = 30.97, SSIM = 0.6292\n",
      "Image forest12.png: PSNR = 30.73, SSIM = 0.6054\n",
      "Image forest19.png: PSNR = 28.78, SSIM = 0.4128\n",
      "Image forest20.png: PSNR = 28.47, SSIM = 0.3881\n",
      "Image forest29.png: PSNR = 30.06, SSIM = 0.6258\n",
      "Image forest34.png: PSNR = 29.87, SSIM = 0.5858\n",
      "Image forest39.png: PSNR = 30.10, SSIM = 0.6030\n",
      "Image forest45.png: PSNR = 30.54, SSIM = 0.6703\n",
      "Image forest53.png: PSNR = 30.49, SSIM = 0.6858\n",
      "Image forest56.png: PSNR = 29.76, SSIM = 0.6354\n",
      "Image forest62.png: PSNR = 30.89, SSIM = 0.8074\n",
      "Image forest69.png: PSNR = 29.33, SSIM = 0.5136\n",
      "Image forest73.png: PSNR = 29.03, SSIM = 0.4515\n",
      "Image forest74.png: PSNR = 29.69, SSIM = 0.5323\n",
      "Image forest80.png: PSNR = 30.24, SSIM = 0.5689\n",
      "Image forest84.png: PSNR = 29.29, SSIM = 0.4801\n",
      "Image forest93.png: PSNR = 29.03, SSIM = 0.4348\n",
      "Image freeway00.png: PSNR = 31.53, SSIM = 0.8511\n",
      "Image freeway03.png: PSNR = 31.70, SSIM = 0.8324\n",
      "Image freeway07.png: PSNR = 31.91, SSIM = 0.8706\n",
      "Image freeway09.png: PSNR = 33.34, SSIM = 0.8947\n",
      "Image freeway12.png: PSNR = 33.23, SSIM = 0.8788\n",
      "Image freeway25.png: PSNR = 31.32, SSIM = 0.7050\n",
      "Image freeway26.png: PSNR = 30.93, SSIM = 0.6577\n",
      "Image freeway44.png: PSNR = 30.12, SSIM = 0.5863\n",
      "Image freeway55.png: PSNR = 31.76, SSIM = 0.8164\n",
      "Image freeway64.png: PSNR = 31.24, SSIM = 0.7963\n",
      "Image freeway67.png: PSNR = 31.78, SSIM = 0.8200\n",
      "Image freeway71.png: PSNR = 32.85, SSIM = 0.8612\n",
      "Image freeway74.png: PSNR = 34.37, SSIM = 0.8873\n",
      "Image freeway75.png: PSNR = 34.23, SSIM = 0.9031\n",
      "Image freeway76.png: PSNR = 30.91, SSIM = 0.7859\n",
      "Image freeway77.png: PSNR = 32.26, SSIM = 0.8456\n",
      "Image freeway78.png: PSNR = 33.40, SSIM = 0.8719\n",
      "Image freeway87.png: PSNR = 28.61, SSIM = 0.3869\n",
      "Image freeway92.png: PSNR = 33.07, SSIM = 0.8360\n",
      "Image freeway93.png: PSNR = 30.49, SSIM = 0.6314\n",
      "Image golfcourse07.png: PSNR = 33.01, SSIM = 0.7668\n",
      "Image golfcourse08.png: PSNR = 32.43, SSIM = 0.7238\n",
      "Image golfcourse14.png: PSNR = 33.38, SSIM = 0.7859\n",
      "Image golfcourse17.png: PSNR = 34.54, SSIM = 0.8233\n",
      "Image golfcourse18.png: PSNR = 32.75, SSIM = 0.7576\n",
      "Image golfcourse19.png: PSNR = 31.25, SSIM = 0.6949\n",
      "Image golfcourse24.png: PSNR = 31.63, SSIM = 0.7381\n",
      "Image golfcourse27.png: PSNR = 31.49, SSIM = 0.6563\n",
      "Image golfcourse33.png: PSNR = 31.43, SSIM = 0.6415\n",
      "Image golfcourse35.png: PSNR = 31.79, SSIM = 0.6841\n",
      "Image golfcourse45.png: PSNR = 35.36, SSIM = 0.8597\n",
      "Image golfcourse50.png: PSNR = 33.27, SSIM = 0.7891\n",
      "Image golfcourse52.png: PSNR = 31.94, SSIM = 0.7263\n",
      "Image golfcourse73.png: PSNR = 35.78, SSIM = 0.8895\n",
      "Image golfcourse76.png: PSNR = 32.73, SSIM = 0.7944\n",
      "Image golfcourse77.png: PSNR = 33.24, SSIM = 0.8099\n",
      "Image golfcourse78.png: PSNR = 33.59, SSIM = 0.8284\n",
      "Image golfcourse81.png: PSNR = 32.15, SSIM = 0.7425\n",
      "Image golfcourse82.png: PSNR = 31.87, SSIM = 0.7576\n",
      "Image golfcourse85.png: PSNR = 31.64, SSIM = 0.7335\n",
      "Image harbor00.png: PSNR = 31.80, SSIM = 0.8394\n",
      "Image harbor05.png: PSNR = 30.37, SSIM = 0.7558\n",
      "Image harbor13.png: PSNR = 29.66, SSIM = 0.7269\n",
      "Image harbor14.png: PSNR = 29.78, SSIM = 0.7182\n",
      "Image harbor15.png: PSNR = 29.88, SSIM = 0.7238\n",
      "Image harbor19.png: PSNR = 30.63, SSIM = 0.7778\n",
      "Image harbor22.png: PSNR = 31.69, SSIM = 0.8644\n",
      "Image harbor24.png: PSNR = 30.84, SSIM = 0.8467\n",
      "Image harbor32.png: PSNR = 33.02, SSIM = 0.8597\n",
      "Image harbor33.png: PSNR = 32.69, SSIM = 0.8488\n",
      "Image harbor35.png: PSNR = 31.29, SSIM = 0.8076\n",
      "Image harbor49.png: PSNR = 30.96, SSIM = 0.8116\n",
      "Image harbor61.png: PSNR = 30.06, SSIM = 0.7476\n",
      "Image harbor65.png: PSNR = 30.37, SSIM = 0.7343\n",
      "Image harbor67.png: PSNR = 31.21, SSIM = 0.8578\n",
      "Image harbor68.png: PSNR = 31.87, SSIM = 0.8862\n",
      "Image harbor75.png: PSNR = 31.83, SSIM = 0.8364\n",
      "Image harbor81.png: PSNR = 32.34, SSIM = 0.8756\n",
      "Image harbor83.png: PSNR = 30.16, SSIM = 0.7401\n",
      "Image harbor88.png: PSNR = 30.73, SSIM = 0.7471\n",
      "Image intersection00.png: PSNR = 31.71, SSIM = 0.8370\n",
      "Image intersection10.png: PSNR = 31.39, SSIM = 0.8152\n",
      "Image intersection16.png: PSNR = 32.46, SSIM = 0.7745\n",
      "Image intersection19.png: PSNR = 31.33, SSIM = 0.7798\n",
      "Image intersection26.png: PSNR = 31.94, SSIM = 0.7454\n",
      "Image intersection28.png: PSNR = 31.38, SSIM = 0.7625\n",
      "Image intersection29.png: PSNR = 31.20, SSIM = 0.7310\n",
      "Image intersection30.png: PSNR = 30.81, SSIM = 0.7253\n",
      "Image intersection32.png: PSNR = 31.05, SSIM = 0.7434\n",
      "Image intersection40.png: PSNR = 30.36, SSIM = 0.6921\n",
      "Image intersection43.png: PSNR = 29.98, SSIM = 0.6688\n",
      "Image intersection44.png: PSNR = 31.18, SSIM = 0.7315\n",
      "Image intersection50.png: PSNR = 32.08, SSIM = 0.7620\n",
      "Image intersection52.png: PSNR = 31.93, SSIM = 0.7604\n",
      "Image intersection70.png: PSNR = 32.19, SSIM = 0.8508\n",
      "Image intersection76.png: PSNR = 34.40, SSIM = 0.8995\n",
      "Image intersection77.png: PSNR = 33.89, SSIM = 0.8821\n",
      "Image intersection87.png: PSNR = 31.91, SSIM = 0.7579\n",
      "Image intersection89.png: PSNR = 31.26, SSIM = 0.7176\n",
      "Image intersection99.png: PSNR = 30.93, SSIM = 0.7078\n",
      "Image mediumresidential15.png: PSNR = 29.88, SSIM = 0.6292\n",
      "Image mediumresidential19.png: PSNR = 30.93, SSIM = 0.7029\n",
      "Image mediumresidential34.png: PSNR = 30.42, SSIM = 0.7489\n",
      "Image mediumresidential40.png: PSNR = 30.58, SSIM = 0.7209\n",
      "Image mediumresidential44.png: PSNR = 30.44, SSIM = 0.7090\n",
      "Image mediumresidential49.png: PSNR = 30.44, SSIM = 0.6992\n",
      "Image mediumresidential52.png: PSNR = 30.86, SSIM = 0.7212\n",
      "Image mediumresidential53.png: PSNR = 30.72, SSIM = 0.7391\n",
      "Image mediumresidential73.png: PSNR = 29.05, SSIM = 0.5532\n",
      "Image mediumresidential76.png: PSNR = 33.40, SSIM = 0.8935\n",
      "Image mediumresidential77.png: PSNR = 33.82, SSIM = 0.8856\n",
      "Image mediumresidential78.png: PSNR = 34.24, SSIM = 0.8998\n",
      "Image mediumresidential79.png: PSNR = 34.28, SSIM = 0.8985\n",
      "Image mediumresidential80.png: PSNR = 33.97, SSIM = 0.8796\n",
      "Image mediumresidential81.png: PSNR = 29.66, SSIM = 0.6695\n",
      "Image mediumresidential83.png: PSNR = 29.96, SSIM = 0.7020\n",
      "Image mediumresidential86.png: PSNR = 30.08, SSIM = 0.6563\n",
      "Image mediumresidential89.png: PSNR = 33.08, SSIM = 0.8387\n",
      "Image mediumresidential93.png: PSNR = 32.09, SSIM = 0.7985\n",
      "Image mediumresidential97.png: PSNR = 30.76, SSIM = 0.7505\n",
      "Image mobilehomepark03.png: PSNR = 29.97, SSIM = 0.6822\n",
      "Image mobilehomepark04.png: PSNR = 30.64, SSIM = 0.7154\n",
      "Image mobilehomepark05.png: PSNR = 30.50, SSIM = 0.7531\n",
      "Image mobilehomepark16.png: PSNR = 30.52, SSIM = 0.7464\n",
      "Image mobilehomepark29.png: PSNR = 31.26, SSIM = 0.8256\n",
      "Image mobilehomepark48.png: PSNR = 30.93, SSIM = 0.8167\n",
      "Image mobilehomepark49.png: PSNR = 31.48, SSIM = 0.8474\n",
      "Image mobilehomepark50.png: PSNR = 31.02, SSIM = 0.8181\n",
      "Image mobilehomepark54.png: PSNR = 32.24, SSIM = 0.8658\n",
      "Image mobilehomepark57.png: PSNR = 31.65, SSIM = 0.8387\n",
      "Image mobilehomepark59.png: PSNR = 30.83, SSIM = 0.8011\n",
      "Image mobilehomepark61.png: PSNR = 32.01, SSIM = 0.8739\n",
      "Image mobilehomepark63.png: PSNR = 31.80, SSIM = 0.8529\n",
      "Image mobilehomepark64.png: PSNR = 31.48, SSIM = 0.8488\n",
      "Image mobilehomepark77.png: PSNR = 29.87, SSIM = 0.6718\n",
      "Image mobilehomepark80.png: PSNR = 28.89, SSIM = 0.5853\n",
      "Image mobilehomepark83.png: PSNR = 28.82, SSIM = 0.5595\n",
      "Image mobilehomepark84.png: PSNR = 28.62, SSIM = 0.4898\n",
      "Image mobilehomepark93.png: PSNR = 28.91, SSIM = 0.5972\n",
      "Image mobilehomepark95.png: PSNR = 28.59, SSIM = 0.4940\n",
      "Image overpass00.png: PSNR = 30.97, SSIM = 0.7615\n",
      "Image overpass09.png: PSNR = 30.78, SSIM = 0.7960\n",
      "Image overpass18.png: PSNR = 32.21, SSIM = 0.8033\n",
      "Image overpass19.png: PSNR = 31.66, SSIM = 0.7828\n",
      "Image overpass27.png: PSNR = 29.36, SSIM = 0.5320\n",
      "Image overpass40.png: PSNR = 30.44, SSIM = 0.6641\n",
      "Image overpass54.png: PSNR = 29.55, SSIM = 0.5901\n",
      "Image overpass56.png: PSNR = 32.53, SSIM = 0.8276\n",
      "Image overpass58.png: PSNR = 30.97, SSIM = 0.7324\n",
      "Image overpass63.png: PSNR = 30.74, SSIM = 0.7390\n",
      "Image overpass66.png: PSNR = 32.03, SSIM = 0.7520\n",
      "Image overpass72.png: PSNR = 29.90, SSIM = 0.5902\n",
      "Image overpass73.png: PSNR = 30.26, SSIM = 0.6460\n",
      "Image overpass76.png: PSNR = 30.47, SSIM = 0.6958\n",
      "Image overpass80.png: PSNR = 30.71, SSIM = 0.6740\n",
      "Image overpass85.png: PSNR = 30.31, SSIM = 0.6350\n",
      "Image overpass90.png: PSNR = 29.45, SSIM = 0.5733\n",
      "Image overpass91.png: PSNR = 30.25, SSIM = 0.6684\n",
      "Image overpass93.png: PSNR = 31.66, SSIM = 0.7913\n",
      "Image overpass95.png: PSNR = 31.40, SSIM = 0.7789\n",
      "Image parkinglot15.png: PSNR = 30.08, SSIM = 0.7613\n",
      "Image parkinglot18.png: PSNR = 31.39, SSIM = 0.8255\n",
      "Image parkinglot24.png: PSNR = 29.92, SSIM = 0.6978\n",
      "Image parkinglot40.png: PSNR = 30.31, SSIM = 0.6993\n",
      "Image parkinglot46.png: PSNR = 29.95, SSIM = 0.6574\n",
      "Image parkinglot52.png: PSNR = 30.83, SSIM = 0.7195\n",
      "Image parkinglot54.png: PSNR = 30.32, SSIM = 0.7218\n",
      "Image parkinglot61.png: PSNR = 30.48, SSIM = 0.6893\n",
      "Image parkinglot63.png: PSNR = 30.30, SSIM = 0.7270\n",
      "Image parkinglot64.png: PSNR = 30.50, SSIM = 0.7009\n",
      "Image parkinglot70.png: PSNR = 29.94, SSIM = 0.6891\n",
      "Image parkinglot71.png: PSNR = 29.78, SSIM = 0.6951\n",
      "Image parkinglot76.png: PSNR = 30.20, SSIM = 0.6747\n",
      "Image parkinglot82.png: PSNR = 30.88, SSIM = 0.8016\n",
      "Image parkinglot83.png: PSNR = 30.28, SSIM = 0.7705\n",
      "Image parkinglot93.png: PSNR = 30.18, SSIM = 0.6181\n",
      "Image parkinglot95.png: PSNR = 30.33, SSIM = 0.6316\n",
      "Image parkinglot96.png: PSNR = 30.08, SSIM = 0.5976\n",
      "Image parkinglot97.png: PSNR = 30.28, SSIM = 0.7602\n",
      "Image parkinglot99.png: PSNR = 30.87, SSIM = 0.7805\n",
      "Image river04.png: PSNR = 29.35, SSIM = 0.5139\n",
      "Image river11.png: PSNR = 29.64, SSIM = 0.5286\n",
      "Image river13.png: PSNR = 29.78, SSIM = 0.5805\n",
      "Image river16.png: PSNR = 30.49, SSIM = 0.6446\n",
      "Image river17.png: PSNR = 30.81, SSIM = 0.6571\n",
      "Image river23.png: PSNR = 29.99, SSIM = 0.5470\n",
      "Image river31.png: PSNR = 30.07, SSIM = 0.5393\n",
      "Image river33.png: PSNR = 29.33, SSIM = 0.4716\n",
      "Image river36.png: PSNR = 30.51, SSIM = 0.6813\n",
      "Image river45.png: PSNR = 30.16, SSIM = 0.6236\n",
      "Image river51.png: PSNR = 32.09, SSIM = 0.7878\n",
      "Image river66.png: PSNR = 28.88, SSIM = 0.4253\n",
      "Image river76.png: PSNR = 35.55, SSIM = 0.8695\n",
      "Image river80.png: PSNR = 31.69, SSIM = 0.7398\n",
      "Image river86.png: PSNR = 31.56, SSIM = 0.7165\n",
      "Image river89.png: PSNR = 31.93, SSIM = 0.7057\n",
      "Image river92.png: PSNR = 32.40, SSIM = 0.7391\n",
      "Image river93.png: PSNR = 30.96, SSIM = 0.6295\n",
      "Image river94.png: PSNR = 29.90, SSIM = 0.5260\n",
      "Image river99.png: PSNR = 34.52, SSIM = 0.8611\n",
      "Image runway04.png: PSNR = 32.88, SSIM = 0.8078\n",
      "Image runway07.png: PSNR = 32.45, SSIM = 0.7544\n",
      "Image runway08.png: PSNR = 32.07, SSIM = 0.7298\n",
      "Image runway11.png: PSNR = 32.57, SSIM = 0.7669\n",
      "Image runway12.png: PSNR = 32.47, SSIM = 0.7479\n",
      "Image runway16.png: PSNR = 32.97, SSIM = 0.7985\n",
      "Image runway31.png: PSNR = 33.87, SSIM = 0.8535\n",
      "Image runway39.png: PSNR = 32.48, SSIM = 0.7500\n",
      "Image runway41.png: PSNR = 32.20, SSIM = 0.7794\n",
      "Image runway42.png: PSNR = 32.21, SSIM = 0.7603\n",
      "Image runway43.png: PSNR = 32.63, SSIM = 0.7932\n",
      "Image runway56.png: PSNR = 32.38, SSIM = 0.7808\n",
      "Image runway66.png: PSNR = 32.01, SSIM = 0.7343\n",
      "Image runway67.png: PSNR = 30.88, SSIM = 0.6426\n",
      "Image runway72.png: PSNR = 35.09, SSIM = 0.8813\n",
      "Image runway74.png: PSNR = 34.26, SSIM = 0.8712\n",
      "Image runway76.png: PSNR = 34.91, SSIM = 0.8742\n",
      "Image runway82.png: PSNR = 33.15, SSIM = 0.8155\n",
      "Image runway83.png: PSNR = 32.81, SSIM = 0.8164\n",
      "Image runway95.png: PSNR = 34.63, SSIM = 0.8405\n",
      "Image sparseresidential00.png: PSNR = 30.37, SSIM = 0.6584\n",
      "Image sparseresidential01.png: PSNR = 30.75, SSIM = 0.6662\n",
      "Image sparseresidential04.png: PSNR = 30.13, SSIM = 0.5997\n",
      "Image sparseresidential07.png: PSNR = 29.29, SSIM = 0.5200\n",
      "Image sparseresidential09.png: PSNR = 29.20, SSIM = 0.4979\n",
      "Image sparseresidential11.png: PSNR = 29.45, SSIM = 0.5910\n",
      "Image sparseresidential23.png: PSNR = 29.95, SSIM = 0.5728\n",
      "Image sparseresidential28.png: PSNR = 30.50, SSIM = 0.6376\n",
      "Image sparseresidential33.png: PSNR = 30.28, SSIM = 0.6008\n",
      "Image sparseresidential41.png: PSNR = 30.21, SSIM = 0.6373\n",
      "Image sparseresidential45.png: PSNR = 36.31, SSIM = 0.9107\n",
      "Image sparseresidential64.png: PSNR = 30.10, SSIM = 0.6739\n",
      "Image sparseresidential67.png: PSNR = 30.03, SSIM = 0.6710\n",
      "Image sparseresidential70.png: PSNR = 30.65, SSIM = 0.7148\n",
      "Image sparseresidential71.png: PSNR = 29.69, SSIM = 0.6268\n",
      "Image sparseresidential72.png: PSNR = 30.44, SSIM = 0.7164\n",
      "Image sparseresidential81.png: PSNR = 32.13, SSIM = 0.8317\n",
      "Image sparseresidential82.png: PSNR = 32.52, SSIM = 0.7972\n",
      "Image sparseresidential92.png: PSNR = 30.65, SSIM = 0.7128\n",
      "Image sparseresidential95.png: PSNR = 31.24, SSIM = 0.8167\n",
      "Image storagetanks01.png: PSNR = 33.64, SSIM = 0.8599\n",
      "Image storagetanks02.png: PSNR = 33.40, SSIM = 0.8310\n",
      "Image storagetanks16.png: PSNR = 31.76, SSIM = 0.8224\n",
      "Image storagetanks24.png: PSNR = 31.86, SSIM = 0.7372\n",
      "Image storagetanks27.png: PSNR = 29.43, SSIM = 0.5705\n",
      "Image storagetanks29.png: PSNR = 29.35, SSIM = 0.4757\n",
      "Image storagetanks33.png: PSNR = 30.24, SSIM = 0.6004\n",
      "Image storagetanks36.png: PSNR = 29.99, SSIM = 0.6197\n",
      "Image storagetanks37.png: PSNR = 30.06, SSIM = 0.5912\n",
      "Image storagetanks41.png: PSNR = 29.38, SSIM = 0.5519\n",
      "Image storagetanks42.png: PSNR = 30.06, SSIM = 0.7151\n",
      "Image storagetanks43.png: PSNR = 30.20, SSIM = 0.6489\n",
      "Image storagetanks57.png: PSNR = 33.89, SSIM = 0.8213\n",
      "Image storagetanks67.png: PSNR = 35.76, SSIM = 0.9205\n",
      "Image storagetanks68.png: PSNR = 32.87, SSIM = 0.8706\n",
      "Image storagetanks69.png: PSNR = 33.57, SSIM = 0.8750\n",
      "Image storagetanks70.png: PSNR = 33.79, SSIM = 0.8881\n",
      "Image storagetanks87.png: PSNR = 36.77, SSIM = 0.9065\n",
      "Image storagetanks90.png: PSNR = 31.73, SSIM = 0.7618\n",
      "Image storagetanks91.png: PSNR = 31.08, SSIM = 0.7549\n",
      "Image tenniscourt05.png: PSNR = 30.81, SSIM = 0.6985\n",
      "Image tenniscourt13.png: PSNR = 30.42, SSIM = 0.6338\n",
      "Image tenniscourt18.png: PSNR = 32.90, SSIM = 0.8421\n",
      "Image tenniscourt19.png: PSNR = 32.43, SSIM = 0.8204\n",
      "Image tenniscourt23.png: PSNR = 34.55, SSIM = 0.8838\n",
      "Image tenniscourt24.png: PSNR = 32.38, SSIM = 0.8095\n",
      "Image tenniscourt25.png: PSNR = 31.49, SSIM = 0.7609\n",
      "Image tenniscourt26.png: PSNR = 31.32, SSIM = 0.7703\n",
      "Image tenniscourt27.png: PSNR = 31.59, SSIM = 0.7871\n",
      "Image tenniscourt37.png: PSNR = 30.86, SSIM = 0.6449\n",
      "Image tenniscourt38.png: PSNR = 30.73, SSIM = 0.6424\n",
      "Image tenniscourt44.png: PSNR = 30.95, SSIM = 0.6521\n",
      "Image tenniscourt52.png: PSNR = 32.81, SSIM = 0.8390\n",
      "Image tenniscourt60.png: PSNR = 33.77, SSIM = 0.8498\n",
      "Image tenniscourt63.png: PSNR = 32.91, SSIM = 0.8210\n",
      "Image tenniscourt81.png: PSNR = 36.17, SSIM = 0.8875\n",
      "Image tenniscourt85.png: PSNR = 33.33, SSIM = 0.7872\n",
      "Image tenniscourt88.png: PSNR = 32.87, SSIM = 0.7888\n",
      "Image tenniscourt93.png: PSNR = 32.95, SSIM = 0.8318\n",
      "Image tenniscourt95.png: PSNR = 33.35, SSIM = 0.8692\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "6ec8c3f3",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha=0.8\n",
      "Average PSNR: 31.59\n",
      "Average SSIM: 0.7275\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"alpha=0.8\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff26286b",
   "metadata": {},
   "source": [
    "# Interpolating with alpha =  0.9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "5caef31d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interpolating with alpha =  0.9\n"
     ]
    }
   ],
   "source": [
    "#net_interp.py\n",
    "import sys\n",
    "import torch\n",
    "from collections import OrderedDict\n",
    "\n",
    "alpha =0.9\n",
    "\n",
    "net_PSNR_path = './models/RRDB_PSNR_x4.pth'\n",
    "net_ESRGAN_path = './models/RRDB_ESRGAN_x4.pth'\n",
    "net_interp_path = './models/interp_{:02d}.pth'.format(int(alpha*10))\n",
    "\n",
    "net_PSNR = torch.load(net_PSNR_path)\n",
    "net_ESRGAN = torch.load(net_ESRGAN_path)\n",
    "net_interp = OrderedDict()\n",
    "\n",
    "print('Interpolating with alpha = ', alpha)\n",
    "for k, v_PSNR in net_PSNR.items():\n",
    "    v_ESRGAN = net_ESRGAN[k]\n",
    "    net_interp[k] = (1 - alpha) * v_PSNR + alpha * v_ESRGAN\n",
    "\n",
    "torch.save(net_interp, net_interp_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "30c81f16",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model path models/interp_09.pth. \n",
      "Testing...\n",
      "1 agricultural07\n",
      "2 agricultural12\n",
      "3 agricultural27\n",
      "4 agricultural28\n",
      "5 agricultural33\n",
      "6 agricultural39\n",
      "7 agricultural54\n",
      "8 agricultural55\n",
      "9 agricultural60\n",
      "10 agricultural61\n",
      "11 agricultural62\n",
      "12 agricultural63\n",
      "13 agricultural67\n",
      "14 agricultural69\n",
      "15 agricultural72\n",
      "16 agricultural74\n",
      "17 agricultural76\n",
      "18 agricultural83\n",
      "19 agricultural84\n",
      "20 agricultural85\n",
      "21 airplane04\n",
      "22 airplane09\n",
      "23 airplane17\n",
      "24 airplane25\n",
      "25 airplane28\n",
      "26 airplane29\n",
      "27 airplane30\n",
      "28 airplane32\n",
      "29 airplane40\n",
      "30 airplane48\n",
      "31 airplane55\n",
      "32 airplane65\n",
      "33 airplane71\n",
      "34 airplane74\n",
      "35 airplane75\n",
      "36 airplane80\n",
      "37 airplane81\n",
      "38 airplane85\n",
      "39 airplane86\n",
      "40 airplane87\n",
      "41 baseballdiamond03\n",
      "42 baseballdiamond04\n",
      "43 baseballdiamond05\n",
      "44 baseballdiamond13\n",
      "45 baseballdiamond16\n",
      "46 baseballdiamond24\n",
      "47 baseballdiamond31\n",
      "48 baseballdiamond32\n",
      "49 baseballdiamond37\n",
      "50 baseballdiamond40\n",
      "51 baseballdiamond47\n",
      "52 baseballdiamond50\n",
      "53 baseballdiamond53\n",
      "54 baseballdiamond58\n",
      "55 baseballdiamond72\n",
      "56 baseballdiamond74\n",
      "57 baseballdiamond79\n",
      "58 baseballdiamond81\n",
      "59 baseballdiamond83\n",
      "60 baseballdiamond96\n",
      "61 beach02\n",
      "62 beach11\n",
      "63 beach13\n",
      "64 beach16\n",
      "65 beach19\n",
      "66 beach26\n",
      "67 beach46\n",
      "68 beach50\n",
      "69 beach54\n",
      "70 beach60\n",
      "71 beach72\n",
      "72 beach73\n",
      "73 beach76\n",
      "74 beach85\n",
      "75 beach86\n",
      "76 beach88\n",
      "77 beach89\n",
      "78 beach94\n",
      "79 beach97\n",
      "80 beach99\n",
      "81 buildings27\n",
      "82 buildings32\n",
      "83 buildings34\n",
      "84 buildings35\n",
      "85 buildings36\n",
      "86 buildings44\n",
      "87 buildings45\n",
      "88 buildings46\n",
      "89 buildings51\n",
      "90 buildings52\n",
      "91 buildings56\n",
      "92 buildings63\n",
      "93 buildings64\n",
      "94 buildings65\n",
      "95 buildings69\n",
      "96 buildings73\n",
      "97 buildings74\n",
      "98 buildings79\n",
      "99 buildings89\n",
      "100 buildings93\n",
      "101 chaparral09\n",
      "102 chaparral15\n",
      "103 chaparral17\n",
      "104 chaparral23\n",
      "105 chaparral26\n",
      "106 chaparral33\n",
      "107 chaparral37\n",
      "108 chaparral42\n",
      "109 chaparral43\n",
      "110 chaparral50\n",
      "111 chaparral55\n",
      "112 chaparral61\n",
      "113 chaparral63\n",
      "114 chaparral64\n",
      "115 chaparral68\n",
      "116 chaparral71\n",
      "117 chaparral80\n",
      "118 chaparral83\n",
      "119 chaparral88\n",
      "120 chaparral99\n",
      "121 denseresidential02\n",
      "122 denseresidential12\n",
      "123 denseresidential14\n",
      "124 denseresidential15\n",
      "125 denseresidential29\n",
      "126 denseresidential31\n",
      "127 denseresidential34\n",
      "128 denseresidential38\n",
      "129 denseresidential46\n",
      "130 denseresidential53\n",
      "131 denseresidential60\n",
      "132 denseresidential64\n",
      "133 denseresidential65\n",
      "134 denseresidential68\n",
      "135 denseresidential75\n",
      "136 denseresidential88\n",
      "137 denseresidential89\n",
      "138 denseresidential91\n",
      "139 denseresidential96\n",
      "140 denseresidential97\n",
      "141 forest08\n",
      "142 forest09\n",
      "143 forest10\n",
      "144 forest11\n",
      "145 forest12\n",
      "146 forest19\n",
      "147 forest20\n",
      "148 forest29\n",
      "149 forest34\n",
      "150 forest39\n",
      "151 forest45\n",
      "152 forest53\n",
      "153 forest56\n",
      "154 forest62\n",
      "155 forest69\n",
      "156 forest73\n",
      "157 forest74\n",
      "158 forest80\n",
      "159 forest84\n",
      "160 forest93\n",
      "161 freeway00\n",
      "162 freeway03\n",
      "163 freeway07\n",
      "164 freeway09\n",
      "165 freeway12\n",
      "166 freeway25\n",
      "167 freeway26\n",
      "168 freeway44\n",
      "169 freeway55\n",
      "170 freeway64\n",
      "171 freeway67\n",
      "172 freeway71\n",
      "173 freeway74\n",
      "174 freeway75\n",
      "175 freeway76\n",
      "176 freeway77\n",
      "177 freeway78\n",
      "178 freeway87\n",
      "179 freeway92\n",
      "180 freeway93\n",
      "181 golfcourse07\n",
      "182 golfcourse08\n",
      "183 golfcourse14\n",
      "184 golfcourse17\n",
      "185 golfcourse18\n",
      "186 golfcourse19\n",
      "187 golfcourse24\n",
      "188 golfcourse27\n",
      "189 golfcourse33\n",
      "190 golfcourse35\n",
      "191 golfcourse45\n",
      "192 golfcourse50\n",
      "193 golfcourse52\n",
      "194 golfcourse73\n",
      "195 golfcourse76\n",
      "196 golfcourse77\n",
      "197 golfcourse78\n",
      "198 golfcourse81\n",
      "199 golfcourse82\n",
      "200 golfcourse85\n",
      "201 harbor00\n",
      "202 harbor05\n",
      "203 harbor13\n",
      "204 harbor14\n",
      "205 harbor15\n",
      "206 harbor19\n",
      "207 harbor22\n",
      "208 harbor24\n",
      "209 harbor32\n",
      "210 harbor33\n",
      "211 harbor35\n",
      "212 harbor49\n",
      "213 harbor61\n",
      "214 harbor65\n",
      "215 harbor67\n",
      "216 harbor68\n",
      "217 harbor75\n",
      "218 harbor81\n",
      "219 harbor83\n",
      "220 harbor88\n",
      "221 intersection00\n",
      "222 intersection10\n",
      "223 intersection16\n",
      "224 intersection19\n",
      "225 intersection26\n",
      "226 intersection28\n",
      "227 intersection29\n",
      "228 intersection30\n",
      "229 intersection32\n",
      "230 intersection40\n",
      "231 intersection43\n",
      "232 intersection44\n",
      "233 intersection50\n",
      "234 intersection52\n",
      "235 intersection70\n",
      "236 intersection76\n",
      "237 intersection77\n",
      "238 intersection87\n",
      "239 intersection89\n",
      "240 intersection99\n",
      "241 mediumresidential15\n",
      "242 mediumresidential19\n",
      "243 mediumresidential34\n",
      "244 mediumresidential40\n",
      "245 mediumresidential44\n",
      "246 mediumresidential49\n",
      "247 mediumresidential52\n",
      "248 mediumresidential53\n",
      "249 mediumresidential73\n",
      "250 mediumresidential76\n",
      "251 mediumresidential77\n",
      "252 mediumresidential78\n",
      "253 mediumresidential79\n",
      "254 mediumresidential80\n",
      "255 mediumresidential81\n",
      "256 mediumresidential83\n",
      "257 mediumresidential86\n",
      "258 mediumresidential89\n",
      "259 mediumresidential93\n",
      "260 mediumresidential97\n",
      "261 mobilehomepark03\n",
      "262 mobilehomepark04\n",
      "263 mobilehomepark05\n",
      "264 mobilehomepark16\n",
      "265 mobilehomepark29\n",
      "266 mobilehomepark48\n",
      "267 mobilehomepark49\n",
      "268 mobilehomepark50\n",
      "269 mobilehomepark54\n",
      "270 mobilehomepark57\n",
      "271 mobilehomepark59\n",
      "272 mobilehomepark61\n",
      "273 mobilehomepark63\n",
      "274 mobilehomepark64\n",
      "275 mobilehomepark77\n",
      "276 mobilehomepark80\n",
      "277 mobilehomepark83\n",
      "278 mobilehomepark84\n",
      "279 mobilehomepark93\n",
      "280 mobilehomepark95\n",
      "281 overpass00\n",
      "282 overpass09\n",
      "283 overpass18\n",
      "284 overpass19\n",
      "285 overpass27\n",
      "286 overpass40\n",
      "287 overpass54\n",
      "288 overpass56\n",
      "289 overpass58\n",
      "290 overpass63\n",
      "291 overpass66\n",
      "292 overpass72\n",
      "293 overpass73\n",
      "294 overpass76\n",
      "295 overpass80\n",
      "296 overpass85\n",
      "297 overpass90\n",
      "298 overpass91\n",
      "299 overpass93\n",
      "300 overpass95\n",
      "301 parkinglot15\n",
      "302 parkinglot18\n",
      "303 parkinglot24\n",
      "304 parkinglot40\n",
      "305 parkinglot46\n",
      "306 parkinglot52\n",
      "307 parkinglot54\n",
      "308 parkinglot61\n",
      "309 parkinglot63\n",
      "310 parkinglot64\n",
      "311 parkinglot70\n",
      "312 parkinglot71\n",
      "313 parkinglot76\n",
      "314 parkinglot82\n",
      "315 parkinglot83\n",
      "316 parkinglot93\n",
      "317 parkinglot95\n",
      "318 parkinglot96\n",
      "319 parkinglot97\n",
      "320 parkinglot99\n",
      "321 river04\n",
      "322 river11\n",
      "323 river13\n",
      "324 river16\n",
      "325 river17\n",
      "326 river23\n",
      "327 river31\n",
      "328 river33\n",
      "329 river36\n",
      "330 river45\n",
      "331 river51\n",
      "332 river66\n",
      "333 river76\n",
      "334 river80\n",
      "335 river86\n",
      "336 river89\n",
      "337 river92\n",
      "338 river93\n",
      "339 river94\n",
      "340 river99\n",
      "341 runway04\n",
      "342 runway07\n",
      "343 runway08\n",
      "344 runway11\n",
      "345 runway12\n",
      "346 runway16\n",
      "347 runway31\n",
      "348 runway39\n",
      "349 runway41\n",
      "350 runway42\n",
      "351 runway43\n",
      "352 runway56\n",
      "353 runway66\n",
      "354 runway67\n",
      "355 runway72\n",
      "356 runway74\n",
      "357 runway76\n",
      "358 runway82\n",
      "359 runway83\n",
      "360 runway95\n",
      "361 sparseresidential00\n",
      "362 sparseresidential01\n",
      "363 sparseresidential04\n",
      "364 sparseresidential07\n",
      "365 sparseresidential09\n",
      "366 sparseresidential11\n",
      "367 sparseresidential23\n",
      "368 sparseresidential28\n",
      "369 sparseresidential33\n",
      "370 sparseresidential41\n",
      "371 sparseresidential45\n",
      "372 sparseresidential64\n",
      "373 sparseresidential67\n",
      "374 sparseresidential70\n",
      "375 sparseresidential71\n",
      "376 sparseresidential72\n",
      "377 sparseresidential81\n",
      "378 sparseresidential82\n",
      "379 sparseresidential92\n",
      "380 sparseresidential95\n",
      "381 storagetanks01\n",
      "382 storagetanks02\n",
      "383 storagetanks16\n",
      "384 storagetanks24\n",
      "385 storagetanks27\n",
      "386 storagetanks29\n",
      "387 storagetanks33\n",
      "388 storagetanks36\n",
      "389 storagetanks37\n",
      "390 storagetanks41\n",
      "391 storagetanks42\n",
      "392 storagetanks43\n",
      "393 storagetanks57\n",
      "394 storagetanks67\n",
      "395 storagetanks68\n",
      "396 storagetanks69\n",
      "397 storagetanks70\n",
      "398 storagetanks87\n",
      "399 storagetanks90\n",
      "400 storagetanks91\n",
      "401 tenniscourt05\n",
      "402 tenniscourt13\n",
      "403 tenniscourt18\n",
      "404 tenniscourt19\n",
      "405 tenniscourt23\n",
      "406 tenniscourt24\n",
      "407 tenniscourt25\n",
      "408 tenniscourt26\n",
      "409 tenniscourt27\n",
      "410 tenniscourt37\n",
      "411 tenniscourt38\n",
      "412 tenniscourt44\n",
      "413 tenniscourt52\n",
      "414 tenniscourt60\n",
      "415 tenniscourt63\n",
      "416 tenniscourt81\n",
      "417 tenniscourt85\n",
      "418 tenniscourt88\n",
      "419 tenniscourt93\n",
      "420 tenniscourt95\n"
     ]
    }
   ],
   "source": [
    "#test.py\n",
    "import os.path as osp\n",
    "import glob\n",
    "import cv2\n",
    "import numpy as np\n",
    "import torch\n",
    "import RRDBNet_arch as arch\n",
    "\n",
    "model_path = 'models/interp_09.pth'  # models/RRDB_ESRGAN_x4.pth OR models/RRDB_PSNR_x4.pth\n",
    "#device = torch.device('cuda')  # if you want to run on CPU, change 'cuda' -> cpu\n",
    "device = torch.device('cpu')\n",
    "\n",
    "test_img_folder = 'LR1/*'\n",
    "\n",
    "model = arch.RRDBNet(3, 3, 64, 23, gc=32)\n",
    "model.load_state_dict(torch.load(model_path), strict=True)\n",
    "model.eval()\n",
    "model = model.to(device)\n",
    "\n",
    "print('Model path {:s}. \\nTesting...'.format(model_path))\n",
    "\n",
    "idx = 0\n",
    "for path in glob.glob(test_img_folder):\n",
    "    idx += 1\n",
    "    base = osp.splitext(osp.basename(path))[0]\n",
    "    print(idx, base)\n",
    "    # read images\n",
    "    img = cv2.imread(path, cv2.IMREAD_COLOR)\n",
    "    img = img * 1.0 / 255\n",
    "    img = torch.from_numpy(np.transpose(img[:, :, [2, 1, 0]], (2, 0, 1))).float()\n",
    "    img_LR = img.unsqueeze(0)\n",
    "    img_LR = img_LR.to(device)\n",
    "\n",
    "    with torch.no_grad():\n",
    "        output = model(img_LR).data.squeeze().float().cpu().clamp_(0, 1).numpy()\n",
    "    output = np.transpose(output[[2, 1, 0], :, :], (1, 2, 0))\n",
    "    output = (output * 255.0).round()\n",
    "    cv2.imwrite('results1/{:s}.png'.format(base), output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "8f901879",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Image agricultural07.png: PSNR = 28.38, SSIM = 0.1007\n",
      "Image agricultural12.png: PSNR = 29.59, SSIM = 0.7757\n",
      "Image agricultural27.png: PSNR = 28.73, SSIM = 0.2264\n",
      "Image agricultural28.png: PSNR = 28.81, SSIM = 0.2132\n",
      "Image agricultural33.png: PSNR = 30.44, SSIM = 0.4416\n",
      "Image agricultural39.png: PSNR = 31.38, SSIM = 0.7587\n",
      "Image agricultural54.png: PSNR = 31.52, SSIM = 0.6505\n",
      "Image agricultural55.png: PSNR = 35.91, SSIM = 0.8256\n",
      "Image agricultural60.png: PSNR = 30.25, SSIM = 0.6853\n",
      "Image agricultural61.png: PSNR = 32.21, SSIM = 0.9308\n",
      "Image agricultural62.png: PSNR = 28.69, SSIM = 0.1950\n",
      "Image agricultural63.png: PSNR = 30.22, SSIM = 0.4155\n",
      "Image agricultural67.png: PSNR = 27.86, SSIM = 0.1086\n",
      "Image agricultural69.png: PSNR = 27.77, SSIM = 0.1048\n",
      "Image agricultural72.png: PSNR = 27.89, SSIM = 0.1155\n",
      "Image agricultural74.png: PSNR = 29.15, SSIM = 0.3744\n",
      "Image agricultural76.png: PSNR = 29.62, SSIM = 0.6393\n",
      "Image agricultural83.png: PSNR = 28.26, SSIM = 0.1785\n",
      "Image agricultural84.png: PSNR = 28.12, SSIM = 0.1289\n",
      "Image agricultural85.png: PSNR = 28.05, SSIM = 0.1161\n",
      "Image airplane04.png: PSNR = 32.97, SSIM = 0.8567\n",
      "Image airplane09.png: PSNR = 32.81, SSIM = 0.8605\n",
      "Image airplane17.png: PSNR = 31.36, SSIM = 0.7759\n",
      "Image airplane25.png: PSNR = 33.67, SSIM = 0.8347\n",
      "Image airplane28.png: PSNR = 31.15, SSIM = 0.6803\n",
      "Image airplane29.png: PSNR = 31.29, SSIM = 0.7141\n",
      "Image airplane30.png: PSNR = 31.32, SSIM = 0.7382\n",
      "Image airplane32.png: PSNR = 32.00, SSIM = 0.7301\n",
      "Image airplane40.png: PSNR = 31.29, SSIM = 0.7217\n",
      "Image airplane48.png: PSNR = 30.21, SSIM = 0.7414\n",
      "Image airplane55.png: PSNR = 30.81, SSIM = 0.7393\n",
      "Image airplane65.png: PSNR = 30.28, SSIM = 0.7012\n",
      "Image airplane71.png: PSNR = 30.36, SSIM = 0.6819\n",
      "Image airplane74.png: PSNR = 32.93, SSIM = 0.8446\n",
      "Image airplane75.png: PSNR = 33.05, SSIM = 0.8465\n",
      "Image airplane80.png: PSNR = 36.08, SSIM = 0.9119\n",
      "Image airplane81.png: PSNR = 32.78, SSIM = 0.8087\n",
      "Image airplane85.png: PSNR = 33.27, SSIM = 0.8245\n",
      "Image airplane86.png: PSNR = 32.09, SSIM = 0.7306\n",
      "Image airplane87.png: PSNR = 30.84, SSIM = 0.7511\n",
      "Image baseballdiamond03.png: PSNR = 32.89, SSIM = 0.7504\n",
      "Image baseballdiamond04.png: PSNR = 32.01, SSIM = 0.7172\n",
      "Image baseballdiamond05.png: PSNR = 31.32, SSIM = 0.6877\n",
      "Image baseballdiamond13.png: PSNR = 30.71, SSIM = 0.6515\n",
      "Image baseballdiamond16.png: PSNR = 30.66, SSIM = 0.5983\n",
      "Image baseballdiamond24.png: PSNR = 32.05, SSIM = 0.6796\n",
      "Image baseballdiamond31.png: PSNR = 32.68, SSIM = 0.8060\n",
      "Image baseballdiamond32.png: PSNR = 36.46, SSIM = 0.9051\n",
      "Image baseballdiamond37.png: PSNR = 32.76, SSIM = 0.8116\n",
      "Image baseballdiamond40.png: PSNR = 32.59, SSIM = 0.7994\n",
      "Image baseballdiamond47.png: PSNR = 31.46, SSIM = 0.7392\n",
      "Image baseballdiamond50.png: PSNR = 31.90, SSIM = 0.7676\n",
      "Image baseballdiamond53.png: PSNR = 36.73, SSIM = 0.9104\n",
      "Image baseballdiamond58.png: PSNR = 33.90, SSIM = 0.8639\n",
      "Image baseballdiamond72.png: PSNR = 35.80, SSIM = 0.8656\n",
      "Image baseballdiamond74.png: PSNR = 36.00, SSIM = 0.8820\n",
      "Image baseballdiamond79.png: PSNR = 30.02, SSIM = 0.5175\n",
      "Image baseballdiamond81.png: PSNR = 33.08, SSIM = 0.7885\n",
      "Image baseballdiamond83.png: PSNR = 34.70, SSIM = 0.8063\n",
      "Image baseballdiamond96.png: PSNR = 34.11, SSIM = 0.8674\n",
      "Image beach02.png: PSNR = 31.49, SSIM = 0.6755\n",
      "Image beach11.png: PSNR = 37.07, SSIM = 0.8966\n",
      "Image beach13.png: PSNR = 39.02, SSIM = 0.9268\n",
      "Image beach16.png: PSNR = 41.93, SSIM = 0.9617\n",
      "Image beach19.png: PSNR = 35.69, SSIM = 0.8868\n",
      "Image beach26.png: PSNR = 38.03, SSIM = 0.9120\n",
      "Image beach46.png: PSNR = 33.50, SSIM = 0.7807\n",
      "Image beach50.png: PSNR = 35.96, SSIM = 0.8866\n",
      "Image beach54.png: PSNR = 35.95, SSIM = 0.8783\n",
      "Image beach60.png: PSNR = 32.96, SSIM = 0.7829\n",
      "Image beach72.png: PSNR = 33.52, SSIM = 0.7888\n",
      "Image beach73.png: PSNR = 31.33, SSIM = 0.6292\n",
      "Image beach76.png: PSNR = 37.58, SSIM = 0.9152\n",
      "Image beach85.png: PSNR = 36.53, SSIM = 0.8764\n",
      "Image beach86.png: PSNR = 37.34, SSIM = 0.8909\n",
      "Image beach88.png: PSNR = 37.38, SSIM = 0.9070\n",
      "Image beach89.png: PSNR = 38.63, SSIM = 0.9217\n",
      "Image beach94.png: PSNR = 32.31, SSIM = 0.7622\n",
      "Image beach97.png: PSNR = 32.40, SSIM = 0.7717\n",
      "Image beach99.png: PSNR = 32.37, SSIM = 0.7574\n",
      "Image buildings27.png: PSNR = 31.36, SSIM = 0.7217\n",
      "Image buildings32.png: PSNR = 30.19, SSIM = 0.6702\n",
      "Image buildings34.png: PSNR = 34.32, SSIM = 0.8851\n",
      "Image buildings35.png: PSNR = 31.95, SSIM = 0.8045\n",
      "Image buildings36.png: PSNR = 29.97, SSIM = 0.6700\n",
      "Image buildings44.png: PSNR = 29.72, SSIM = 0.6629\n",
      "Image buildings45.png: PSNR = 31.24, SSIM = 0.7739\n",
      "Image buildings46.png: PSNR = 30.09, SSIM = 0.6872\n",
      "Image buildings51.png: PSNR = 30.99, SSIM = 0.7634\n",
      "Image buildings52.png: PSNR = 36.79, SSIM = 0.9479\n",
      "Image buildings56.png: PSNR = 30.22, SSIM = 0.6678\n",
      "Image buildings63.png: PSNR = 31.47, SSIM = 0.7926\n",
      "Image buildings64.png: PSNR = 31.94, SSIM = 0.8244\n",
      "Image buildings65.png: PSNR = 34.11, SSIM = 0.8622\n",
      "Image buildings69.png: PSNR = 33.52, SSIM = 0.8891\n",
      "Image buildings73.png: PSNR = 32.55, SSIM = 0.8575\n",
      "Image buildings74.png: PSNR = 31.97, SSIM = 0.8138\n",
      "Image buildings79.png: PSNR = 29.49, SSIM = 0.5850\n",
      "Image buildings89.png: PSNR = 31.06, SSIM = 0.7655\n",
      "Image buildings93.png: PSNR = 30.39, SSIM = 0.6897\n",
      "Image chaparral09.png: PSNR = 29.97, SSIM = 0.7338\n",
      "Image chaparral15.png: PSNR = 30.75, SSIM = 0.7976\n",
      "Image chaparral17.png: PSNR = 32.06, SSIM = 0.7821\n",
      "Image chaparral23.png: PSNR = 29.88, SSIM = 0.7523\n",
      "Image chaparral26.png: PSNR = 29.81, SSIM = 0.6923\n",
      "Image chaparral33.png: PSNR = 30.65, SSIM = 0.7972\n",
      "Image chaparral37.png: PSNR = 30.49, SSIM = 0.7908\n",
      "Image chaparral42.png: PSNR = 28.97, SSIM = 0.4732\n",
      "Image chaparral43.png: PSNR = 30.42, SSIM = 0.7257\n",
      "Image chaparral50.png: PSNR = 29.68, SSIM = 0.6839\n",
      "Image chaparral55.png: PSNR = 29.81, SSIM = 0.7533\n",
      "Image chaparral61.png: PSNR = 28.15, SSIM = 0.1903\n",
      "Image chaparral63.png: PSNR = 28.14, SSIM = 0.1762\n",
      "Image chaparral64.png: PSNR = 28.07, SSIM = 0.1948\n",
      "Image chaparral68.png: PSNR = 30.27, SSIM = 0.7871\n",
      "Image chaparral71.png: PSNR = 29.89, SSIM = 0.7135\n",
      "Image chaparral80.png: PSNR = 29.50, SSIM = 0.6335\n",
      "Image chaparral83.png: PSNR = 29.37, SSIM = 0.6517\n",
      "Image chaparral88.png: PSNR = 31.06, SSIM = 0.7804\n",
      "Image chaparral99.png: PSNR = 29.35, SSIM = 0.6974\n",
      "Image denseresidential02.png: PSNR = 30.87, SSIM = 0.8257\n",
      "Image denseresidential12.png: PSNR = 31.04, SSIM = 0.8490\n",
      "Image denseresidential14.png: PSNR = 29.63, SSIM = 0.6824\n",
      "Image denseresidential15.png: PSNR = 29.75, SSIM = 0.7214\n",
      "Image denseresidential29.png: PSNR = 29.58, SSIM = 0.6425\n",
      "Image denseresidential31.png: PSNR = 30.20, SSIM = 0.7402\n",
      "Image denseresidential34.png: PSNR = 30.97, SSIM = 0.7147\n",
      "Image denseresidential38.png: PSNR = 30.22, SSIM = 0.6912\n",
      "Image denseresidential46.png: PSNR = 30.71, SSIM = 0.7738\n",
      "Image denseresidential53.png: PSNR = 30.10, SSIM = 0.6678\n",
      "Image denseresidential60.png: PSNR = 29.95, SSIM = 0.7207\n",
      "Image denseresidential64.png: PSNR = 30.67, SSIM = 0.7930\n",
      "Image denseresidential65.png: PSNR = 29.96, SSIM = 0.6896\n",
      "Image denseresidential68.png: PSNR = 30.08, SSIM = 0.6963\n",
      "Image denseresidential75.png: PSNR = 30.74, SSIM = 0.7607\n",
      "Image denseresidential88.png: PSNR = 31.32, SSIM = 0.7459\n",
      "Image denseresidential89.png: PSNR = 31.00, SSIM = 0.7217\n",
      "Image denseresidential91.png: PSNR = 31.48, SSIM = 0.7677\n",
      "Image denseresidential96.png: PSNR = 30.28, SSIM = 0.7108\n",
      "Image denseresidential97.png: PSNR = 30.52, SSIM = 0.7273\n",
      "Image forest08.png: PSNR = 29.42, SSIM = 0.4756\n",
      "Image forest09.png: PSNR = 29.34, SSIM = 0.4738\n",
      "Image forest10.png: PSNR = 31.71, SSIM = 0.6638\n",
      "Image forest11.png: PSNR = 30.64, SSIM = 0.5853\n",
      "Image forest12.png: PSNR = 30.37, SSIM = 0.5566\n",
      "Image forest19.png: PSNR = 28.66, SSIM = 0.3752\n",
      "Image forest20.png: PSNR = 28.36, SSIM = 0.3421\n",
      "Image forest29.png: PSNR = 29.89, SSIM = 0.6009\n",
      "Image forest34.png: PSNR = 29.64, SSIM = 0.5423\n",
      "Image forest39.png: PSNR = 29.85, SSIM = 0.5603\n",
      "Image forest45.png: PSNR = 30.11, SSIM = 0.6134\n",
      "Image forest53.png: PSNR = 30.08, SSIM = 0.6316\n",
      "Image forest56.png: PSNR = 29.40, SSIM = 0.5740\n",
      "Image forest62.png: PSNR = 30.67, SSIM = 0.7877\n",
      "Image forest69.png: PSNR = 29.09, SSIM = 0.4499\n",
      "Image forest73.png: PSNR = 28.82, SSIM = 0.3839\n",
      "Image forest74.png: PSNR = 29.46, SSIM = 0.4854\n",
      "Image forest80.png: PSNR = 29.99, SSIM = 0.5300\n",
      "Image forest84.png: PSNR = 29.09, SSIM = 0.4332\n",
      "Image forest93.png: PSNR = 28.85, SSIM = 0.3855\n",
      "Image freeway00.png: PSNR = 31.28, SSIM = 0.8356\n",
      "Image freeway03.png: PSNR = 31.48, SSIM = 0.8183\n",
      "Image freeway07.png: PSNR = 31.67, SSIM = 0.8550\n",
      "Image freeway09.png: PSNR = 33.07, SSIM = 0.8834\n",
      "Image freeway12.png: PSNR = 32.90, SSIM = 0.8634\n",
      "Image freeway25.png: PSNR = 31.05, SSIM = 0.6784\n",
      "Image freeway26.png: PSNR = 30.74, SSIM = 0.6368\n",
      "Image freeway44.png: PSNR = 29.84, SSIM = 0.5415\n",
      "Image freeway55.png: PSNR = 31.41, SSIM = 0.7887\n",
      "Image freeway64.png: PSNR = 31.01, SSIM = 0.7798\n",
      "Image freeway67.png: PSNR = 31.52, SSIM = 0.8008\n",
      "Image freeway71.png: PSNR = 32.52, SSIM = 0.8417\n",
      "Image freeway74.png: PSNR = 33.86, SSIM = 0.8677\n",
      "Image freeway75.png: PSNR = 33.67, SSIM = 0.8821\n",
      "Image freeway76.png: PSNR = 30.71, SSIM = 0.7651\n",
      "Image freeway77.png: PSNR = 31.91, SSIM = 0.8236\n",
      "Image freeway78.png: PSNR = 32.94, SSIM = 0.8516\n",
      "Image freeway87.png: PSNR = 28.48, SSIM = 0.3341\n",
      "Image freeway92.png: PSNR = 32.56, SSIM = 0.8081\n",
      "Image freeway93.png: PSNR = 30.38, SSIM = 0.6153\n",
      "Image golfcourse07.png: PSNR = 32.74, SSIM = 0.7406\n",
      "Image golfcourse08.png: PSNR = 32.19, SSIM = 0.7011\n",
      "Image golfcourse14.png: PSNR = 33.15, SSIM = 0.7633\n",
      "Image golfcourse17.png: PSNR = 34.32, SSIM = 0.8039\n",
      "Image golfcourse18.png: PSNR = 32.52, SSIM = 0.7333\n",
      "Image golfcourse19.png: PSNR = 30.93, SSIM = 0.6573\n",
      "Image golfcourse24.png: PSNR = 31.27, SSIM = 0.7016\n",
      "Image golfcourse27.png: PSNR = 31.17, SSIM = 0.6181\n",
      "Image golfcourse33.png: PSNR = 31.12, SSIM = 0.6053\n",
      "Image golfcourse35.png: PSNR = 31.50, SSIM = 0.6517\n",
      "Image golfcourse45.png: PSNR = 35.13, SSIM = 0.8424\n",
      "Image golfcourse50.png: PSNR = 33.05, SSIM = 0.7697\n",
      "Image golfcourse52.png: PSNR = 31.76, SSIM = 0.7036\n",
      "Image golfcourse73.png: PSNR = 35.52, SSIM = 0.8725\n",
      "Image golfcourse76.png: PSNR = 32.42, SSIM = 0.7623\n",
      "Image golfcourse77.png: PSNR = 32.90, SSIM = 0.7785\n",
      "Image golfcourse78.png: PSNR = 33.27, SSIM = 0.8016\n",
      "Image golfcourse81.png: PSNR = 31.82, SSIM = 0.7066\n",
      "Image golfcourse82.png: PSNR = 31.63, SSIM = 0.7307\n",
      "Image golfcourse85.png: PSNR = 31.35, SSIM = 0.6986\n",
      "Image harbor00.png: PSNR = 31.54, SSIM = 0.8183\n",
      "Image harbor05.png: PSNR = 30.14, SSIM = 0.7274\n",
      "Image harbor13.png: PSNR = 29.49, SSIM = 0.6978\n",
      "Image harbor14.png: PSNR = 29.59, SSIM = 0.6868\n",
      "Image harbor15.png: PSNR = 29.69, SSIM = 0.6935\n",
      "Image harbor19.png: PSNR = 30.43, SSIM = 0.7558\n",
      "Image harbor22.png: PSNR = 31.48, SSIM = 0.8479\n",
      "Image harbor24.png: PSNR = 30.71, SSIM = 0.8310\n",
      "Image harbor32.png: PSNR = 32.73, SSIM = 0.8436\n",
      "Image harbor33.png: PSNR = 32.42, SSIM = 0.8320\n",
      "Image harbor35.png: PSNR = 31.06, SSIM = 0.7932\n",
      "Image harbor49.png: PSNR = 30.85, SSIM = 0.7995\n",
      "Image harbor61.png: PSNR = 30.04, SSIM = 0.7363\n",
      "Image harbor65.png: PSNR = 30.33, SSIM = 0.7217\n",
      "Image harbor67.png: PSNR = 31.08, SSIM = 0.8495\n",
      "Image harbor68.png: PSNR = 31.78, SSIM = 0.8818\n",
      "Image harbor75.png: PSNR = 31.70, SSIM = 0.8290\n",
      "Image harbor81.png: PSNR = 32.17, SSIM = 0.8685\n",
      "Image harbor83.png: PSNR = 30.07, SSIM = 0.7213\n",
      "Image harbor88.png: PSNR = 30.67, SSIM = 0.7315\n",
      "Image intersection00.png: PSNR = 31.49, SSIM = 0.8139\n",
      "Image intersection10.png: PSNR = 31.13, SSIM = 0.7962\n",
      "Image intersection16.png: PSNR = 32.16, SSIM = 0.7513\n",
      "Image intersection19.png: PSNR = 31.15, SSIM = 0.7647\n",
      "Image intersection26.png: PSNR = 31.73, SSIM = 0.7295\n",
      "Image intersection28.png: PSNR = 31.26, SSIM = 0.7530\n",
      "Image intersection29.png: PSNR = 31.04, SSIM = 0.7126\n",
      "Image intersection30.png: PSNR = 30.65, SSIM = 0.7107\n",
      "Image intersection32.png: PSNR = 30.90, SSIM = 0.7310\n",
      "Image intersection40.png: PSNR = 30.04, SSIM = 0.6460\n",
      "Image intersection43.png: PSNR = 29.70, SSIM = 0.6200\n",
      "Image intersection44.png: PSNR = 30.75, SSIM = 0.6813\n",
      "Image intersection50.png: PSNR = 31.93, SSIM = 0.7483\n",
      "Image intersection52.png: PSNR = 31.76, SSIM = 0.7459\n",
      "Image intersection70.png: PSNR = 31.99, SSIM = 0.8385\n",
      "Image intersection76.png: PSNR = 34.09, SSIM = 0.8840\n",
      "Image intersection77.png: PSNR = 33.62, SSIM = 0.8688\n",
      "Image intersection87.png: PSNR = 31.70, SSIM = 0.7418\n",
      "Image intersection89.png: PSNR = 31.07, SSIM = 0.6976\n",
      "Image intersection99.png: PSNR = 30.66, SSIM = 0.6793\n",
      "Image mediumresidential15.png: PSNR = 29.70, SSIM = 0.5989\n",
      "Image mediumresidential19.png: PSNR = 30.69, SSIM = 0.6763\n",
      "Image mediumresidential34.png: PSNR = 30.15, SSIM = 0.7131\n",
      "Image mediumresidential40.png: PSNR = 30.45, SSIM = 0.7046\n",
      "Image mediumresidential44.png: PSNR = 30.25, SSIM = 0.6844\n",
      "Image mediumresidential49.png: PSNR = 30.29, SSIM = 0.6812\n",
      "Image mediumresidential52.png: PSNR = 30.72, SSIM = 0.7019\n",
      "Image mediumresidential53.png: PSNR = 30.56, SSIM = 0.7211\n",
      "Image mediumresidential73.png: PSNR = 28.92, SSIM = 0.5204\n",
      "Image mediumresidential76.png: PSNR = 33.24, SSIM = 0.8847\n",
      "Image mediumresidential77.png: PSNR = 33.57, SSIM = 0.8727\n",
      "Image mediumresidential78.png: PSNR = 33.98, SSIM = 0.8877\n",
      "Image mediumresidential79.png: PSNR = 34.03, SSIM = 0.8876\n",
      "Image mediumresidential80.png: PSNR = 33.77, SSIM = 0.8677\n",
      "Image mediumresidential81.png: PSNR = 29.47, SSIM = 0.6359\n",
      "Image mediumresidential83.png: PSNR = 29.77, SSIM = 0.6703\n",
      "Image mediumresidential86.png: PSNR = 29.91, SSIM = 0.6209\n",
      "Image mediumresidential89.png: PSNR = 32.75, SSIM = 0.8194\n",
      "Image mediumresidential93.png: PSNR = 31.72, SSIM = 0.7715\n",
      "Image mediumresidential97.png: PSNR = 30.60, SSIM = 0.7321\n",
      "Image mobilehomepark03.png: PSNR = 29.83, SSIM = 0.6616\n",
      "Image mobilehomepark04.png: PSNR = 30.51, SSIM = 0.6976\n",
      "Image mobilehomepark05.png: PSNR = 30.41, SSIM = 0.7424\n",
      "Image mobilehomepark16.png: PSNR = 30.40, SSIM = 0.7294\n",
      "Image mobilehomepark29.png: PSNR = 30.97, SSIM = 0.8021\n",
      "Image mobilehomepark48.png: PSNR = 30.71, SSIM = 0.7991\n",
      "Image mobilehomepark49.png: PSNR = 31.24, SSIM = 0.8311\n",
      "Image mobilehomepark50.png: PSNR = 30.81, SSIM = 0.7986\n",
      "Image mobilehomepark54.png: PSNR = 32.01, SSIM = 0.8530\n",
      "Image mobilehomepark57.png: PSNR = 31.36, SSIM = 0.8173\n",
      "Image mobilehomepark59.png: PSNR = 30.58, SSIM = 0.7783\n",
      "Image mobilehomepark61.png: PSNR = 31.76, SSIM = 0.8601\n",
      "Image mobilehomepark63.png: PSNR = 31.52, SSIM = 0.8349\n",
      "Image mobilehomepark64.png: PSNR = 31.26, SSIM = 0.8325\n",
      "Image mobilehomepark77.png: PSNR = 29.77, SSIM = 0.6575\n",
      "Image mobilehomepark80.png: PSNR = 28.84, SSIM = 0.5627\n",
      "Image mobilehomepark83.png: PSNR = 28.76, SSIM = 0.5387\n",
      "Image mobilehomepark84.png: PSNR = 28.58, SSIM = 0.4657\n",
      "Image mobilehomepark93.png: PSNR = 28.82, SSIM = 0.5734\n",
      "Image mobilehomepark95.png: PSNR = 28.55, SSIM = 0.4721\n",
      "Image overpass00.png: PSNR = 30.61, SSIM = 0.7195\n",
      "Image overpass09.png: PSNR = 30.47, SSIM = 0.7647\n",
      "Image overpass18.png: PSNR = 31.63, SSIM = 0.7642\n",
      "Image overpass19.png: PSNR = 31.25, SSIM = 0.7477\n",
      "Image overpass27.png: PSNR = 29.18, SSIM = 0.4945\n",
      "Image overpass40.png: PSNR = 30.18, SSIM = 0.6312\n",
      "Image overpass54.png: PSNR = 29.30, SSIM = 0.5427\n",
      "Image overpass56.png: PSNR = 32.19, SSIM = 0.8059\n",
      "Image overpass58.png: PSNR = 30.68, SSIM = 0.6996\n",
      "Image overpass63.png: PSNR = 30.55, SSIM = 0.7199\n",
      "Image overpass66.png: PSNR = 31.74, SSIM = 0.7298\n",
      "Image overpass72.png: PSNR = 29.72, SSIM = 0.5560\n",
      "Image overpass73.png: PSNR = 29.99, SSIM = 0.6045\n",
      "Image overpass76.png: PSNR = 30.23, SSIM = 0.6670\n",
      "Image overpass80.png: PSNR = 30.50, SSIM = 0.6484\n",
      "Image overpass85.png: PSNR = 30.21, SSIM = 0.6216\n",
      "Image overpass90.png: PSNR = 29.27, SSIM = 0.5339\n",
      "Image overpass91.png: PSNR = 30.02, SSIM = 0.6385\n",
      "Image overpass93.png: PSNR = 31.49, SSIM = 0.7783\n",
      "Image overpass95.png: PSNR = 31.23, SSIM = 0.7643\n",
      "Image parkinglot15.png: PSNR = 29.83, SSIM = 0.7225\n",
      "Image parkinglot18.png: PSNR = 31.20, SSIM = 0.8065\n",
      "Image parkinglot24.png: PSNR = 29.78, SSIM = 0.6762\n",
      "Image parkinglot40.png: PSNR = 30.17, SSIM = 0.6845\n",
      "Image parkinglot46.png: PSNR = 29.85, SSIM = 0.6388\n",
      "Image parkinglot52.png: PSNR = 30.69, SSIM = 0.7029\n",
      "Image parkinglot54.png: PSNR = 30.17, SSIM = 0.7014\n",
      "Image parkinglot61.png: PSNR = 30.31, SSIM = 0.6683\n",
      "Image parkinglot63.png: PSNR = 30.13, SSIM = 0.7056\n",
      "Image parkinglot64.png: PSNR = 30.39, SSIM = 0.6851\n",
      "Image parkinglot70.png: PSNR = 29.75, SSIM = 0.6576\n",
      "Image parkinglot71.png: PSNR = 29.59, SSIM = 0.6550\n",
      "Image parkinglot76.png: PSNR = 29.92, SSIM = 0.6253\n",
      "Image parkinglot82.png: PSNR = 30.63, SSIM = 0.7754\n",
      "Image parkinglot83.png: PSNR = 30.05, SSIM = 0.7392\n",
      "Image parkinglot93.png: PSNR = 30.07, SSIM = 0.5910\n",
      "Image parkinglot95.png: PSNR = 30.18, SSIM = 0.6052\n",
      "Image parkinglot96.png: PSNR = 29.92, SSIM = 0.5687\n",
      "Image parkinglot97.png: PSNR = 30.10, SSIM = 0.7327\n",
      "Image parkinglot99.png: PSNR = 30.70, SSIM = 0.7585\n",
      "Image river04.png: PSNR = 29.18, SSIM = 0.4718\n",
      "Image river11.png: PSNR = 29.49, SSIM = 0.4956\n",
      "Image river13.png: PSNR = 29.65, SSIM = 0.5485\n",
      "Image river16.png: PSNR = 30.35, SSIM = 0.6231\n",
      "Image river17.png: PSNR = 30.64, SSIM = 0.6280\n",
      "Image river23.png: PSNR = 29.80, SSIM = 0.5112\n",
      "Image river31.png: PSNR = 29.98, SSIM = 0.5191\n",
      "Image river33.png: PSNR = 29.22, SSIM = 0.4431\n",
      "Image river36.png: PSNR = 30.22, SSIM = 0.6363\n",
      "Image river45.png: PSNR = 29.86, SSIM = 0.5715\n",
      "Image river51.png: PSNR = 31.89, SSIM = 0.7668\n",
      "Image river66.png: PSNR = 28.77, SSIM = 0.3992\n",
      "Image river76.png: PSNR = 35.19, SSIM = 0.8543\n",
      "Image river80.png: PSNR = 31.50, SSIM = 0.7174\n",
      "Image river86.png: PSNR = 31.28, SSIM = 0.6808\n",
      "Image river89.png: PSNR = 31.63, SSIM = 0.6743\n",
      "Image river92.png: PSNR = 32.19, SSIM = 0.7173\n",
      "Image river93.png: PSNR = 30.71, SSIM = 0.5990\n",
      "Image river94.png: PSNR = 29.72, SSIM = 0.4949\n",
      "Image river99.png: PSNR = 34.33, SSIM = 0.8492\n",
      "Image runway04.png: PSNR = 32.45, SSIM = 0.7798\n",
      "Image runway07.png: PSNR = 31.92, SSIM = 0.7136\n",
      "Image runway08.png: PSNR = 31.48, SSIM = 0.6804\n",
      "Image runway11.png: PSNR = 32.07, SSIM = 0.7269\n",
      "Image runway12.png: PSNR = 31.92, SSIM = 0.7039\n",
      "Image runway16.png: PSNR = 32.45, SSIM = 0.7659\n",
      "Image runway31.png: PSNR = 33.64, SSIM = 0.8377\n",
      "Image runway39.png: PSNR = 31.95, SSIM = 0.7092\n",
      "Image runway41.png: PSNR = 32.05, SSIM = 0.7638\n",
      "Image runway42.png: PSNR = 32.01, SSIM = 0.7421\n",
      "Image runway43.png: PSNR = 32.49, SSIM = 0.7836\n",
      "Image runway56.png: PSNR = 32.02, SSIM = 0.7490\n",
      "Image runway66.png: PSNR = 31.82, SSIM = 0.7180\n",
      "Image runway67.png: PSNR = 30.68, SSIM = 0.6193\n",
      "Image runway72.png: PSNR = 34.89, SSIM = 0.8742\n",
      "Image runway74.png: PSNR = 34.09, SSIM = 0.8641\n",
      "Image runway76.png: PSNR = 34.68, SSIM = 0.8669\n",
      "Image runway82.png: PSNR = 32.88, SSIM = 0.8016\n",
      "Image runway83.png: PSNR = 32.56, SSIM = 0.8035\n",
      "Image runway95.png: PSNR = 34.16, SSIM = 0.8224\n",
      "Image sparseresidential00.png: PSNR = 30.20, SSIM = 0.6312\n",
      "Image sparseresidential01.png: PSNR = 30.55, SSIM = 0.6393\n",
      "Image sparseresidential04.png: PSNR = 29.93, SSIM = 0.5680\n",
      "Image sparseresidential07.png: PSNR = 29.11, SSIM = 0.4773\n",
      "Image sparseresidential09.png: PSNR = 29.00, SSIM = 0.4530\n",
      "Image sparseresidential11.png: PSNR = 29.27, SSIM = 0.5578\n",
      "Image sparseresidential23.png: PSNR = 29.77, SSIM = 0.5454\n",
      "Image sparseresidential28.png: PSNR = 30.30, SSIM = 0.6088\n",
      "Image sparseresidential33.png: PSNR = 30.10, SSIM = 0.5729\n",
      "Image sparseresidential41.png: PSNR = 30.06, SSIM = 0.6155\n",
      "Image sparseresidential45.png: PSNR = 36.04, SSIM = 0.8961\n",
      "Image sparseresidential64.png: PSNR = 29.90, SSIM = 0.6395\n",
      "Image sparseresidential67.png: PSNR = 29.81, SSIM = 0.6378\n",
      "Image sparseresidential70.png: PSNR = 30.38, SSIM = 0.6825\n",
      "Image sparseresidential71.png: PSNR = 29.48, SSIM = 0.5849\n",
      "Image sparseresidential72.png: PSNR = 30.20, SSIM = 0.6830\n",
      "Image sparseresidential81.png: PSNR = 31.83, SSIM = 0.8110\n",
      "Image sparseresidential82.png: PSNR = 32.28, SSIM = 0.7817\n",
      "Image sparseresidential92.png: PSNR = 30.51, SSIM = 0.6936\n",
      "Image sparseresidential95.png: PSNR = 30.90, SSIM = 0.7816\n",
      "Image storagetanks01.png: PSNR = 33.39, SSIM = 0.8447\n",
      "Image storagetanks02.png: PSNR = 33.17, SSIM = 0.8142\n",
      "Image storagetanks16.png: PSNR = 31.52, SSIM = 0.8027\n",
      "Image storagetanks24.png: PSNR = 31.66, SSIM = 0.7186\n",
      "Image storagetanks27.png: PSNR = 29.20, SSIM = 0.5292\n",
      "Image storagetanks29.png: PSNR = 29.11, SSIM = 0.4235\n",
      "Image storagetanks33.png: PSNR = 29.90, SSIM = 0.5455\n",
      "Image storagetanks36.png: PSNR = 29.78, SSIM = 0.5868\n",
      "Image storagetanks37.png: PSNR = 29.75, SSIM = 0.5381\n",
      "Image storagetanks41.png: PSNR = 29.16, SSIM = 0.5067\n",
      "Image storagetanks42.png: PSNR = 29.89, SSIM = 0.6853\n",
      "Image storagetanks43.png: PSNR = 29.98, SSIM = 0.6149\n",
      "Image storagetanks57.png: PSNR = 33.41, SSIM = 0.7920\n",
      "Image storagetanks67.png: PSNR = 35.50, SSIM = 0.9103\n",
      "Image storagetanks68.png: PSNR = 32.63, SSIM = 0.8558\n",
      "Image storagetanks69.png: PSNR = 33.35, SSIM = 0.8636\n",
      "Image storagetanks70.png: PSNR = 33.51, SSIM = 0.8733\n",
      "Image storagetanks87.png: PSNR = 36.56, SSIM = 0.8976\n",
      "Image storagetanks90.png: PSNR = 31.56, SSIM = 0.7466\n",
      "Image storagetanks91.png: PSNR = 30.97, SSIM = 0.7424\n",
      "Image tenniscourt05.png: PSNR = 30.67, SSIM = 0.6856\n",
      "Image tenniscourt13.png: PSNR = 30.25, SSIM = 0.6138\n",
      "Image tenniscourt18.png: PSNR = 32.61, SSIM = 0.8264\n",
      "Image tenniscourt19.png: PSNR = 32.17, SSIM = 0.8029\n",
      "Image tenniscourt23.png: PSNR = 34.25, SSIM = 0.8680\n",
      "Image tenniscourt24.png: PSNR = 32.12, SSIM = 0.7914\n",
      "Image tenniscourt25.png: PSNR = 31.26, SSIM = 0.7395\n",
      "Image tenniscourt26.png: PSNR = 31.06, SSIM = 0.7473\n",
      "Image tenniscourt27.png: PSNR = 31.33, SSIM = 0.7635\n",
      "Image tenniscourt37.png: PSNR = 30.65, SSIM = 0.6140\n",
      "Image tenniscourt38.png: PSNR = 30.51, SSIM = 0.6138\n",
      "Image tenniscourt44.png: PSNR = 30.72, SSIM = 0.6206\n",
      "Image tenniscourt52.png: PSNR = 32.55, SSIM = 0.8210\n",
      "Image tenniscourt60.png: PSNR = 33.48, SSIM = 0.8328\n",
      "Image tenniscourt63.png: PSNR = 32.68, SSIM = 0.8079\n",
      "Image tenniscourt81.png: PSNR = 35.74, SSIM = 0.8690\n",
      "Image tenniscourt85.png: PSNR = 32.91, SSIM = 0.7583\n",
      "Image tenniscourt88.png: PSNR = 32.52, SSIM = 0.7651\n",
      "Image tenniscourt93.png: PSNR = 32.69, SSIM = 0.8144\n",
      "Image tenniscourt95.png: PSNR = 33.16, SSIM = 0.8577\n"
     ]
    }
   ],
   "source": [
    "# 设置文件夹路径\n",
    "sr_folder = 'results1'\n",
    "hr_folder = 'HR1'\n",
    "\n",
    "# 获取所有图像文件名\n",
    "sr_images = [f for f in os.listdir(sr_folder) if f.endswith('.png')]\n",
    "hr_images = [f for f in os.listdir(hr_folder) if f.endswith('.png')]\n",
    "\n",
    "# 确保文件名匹配\n",
    "sr_images.sort()\n",
    "hr_images.sort()\n",
    "\n",
    "# 初始化PSNR和SSIM的总和\n",
    "total_psnr = 0\n",
    "total_ssim = 0\n",
    "num_images = len(sr_images)\n",
    "\n",
    "# 计算PSNR和SSIM\n",
    "for i in range(num_images):\n",
    "    sr_path = os.path.join(sr_folder, sr_images[i])\n",
    "    hr_path = os.path.join(hr_folder, hr_images[i])\n",
    "    \n",
    "    sr_img = cv2.imread(sr_path, cv2.IMREAD_COLOR)\n",
    "    hr_img = cv2.imread(hr_path, cv2.IMREAD_COLOR)\n",
    "    \n",
    "    psnr = calculate_psnr(sr_img, hr_img)\n",
    "    ssim = calculate_ssim(sr_img, hr_img)\n",
    "    \n",
    "    total_psnr += psnr\n",
    "    total_ssim += ssim\n",
    "    \n",
    "    print(f\"Image {sr_images[i]}: PSNR = {psnr:.2f}, SSIM = {ssim:.4f}\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "bc60ee3d",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha=0.9\n",
      "Average PSNR: 31.35\n",
      "Average SSIM: 0.7034\n"
     ]
    }
   ],
   "source": [
    "# 计算平均PSNR和SSIM\n",
    "average_psnr = total_psnr / num_images\n",
    "average_ssim = total_ssim / num_images\n",
    "\n",
    "print(f\"alpha=0.9\\nAverage PSNR: {average_psnr:.2f}\")\n",
    "print(f\"Average SSIM: {average_ssim:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69aed6ed",
   "metadata": {},
   "source": [
    "# 折线图展示"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38fea96b",
   "metadata": {},
   "source": [
    "## 9张"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "83f83247",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAMWCAYAAADs4eXxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAADbaklEQVR4nOzde3zO9f/H8ce185ht5rRhc44mpxwyOYYcI6wIOSSlKFL9QhE6UDqQQiekDBlyyClqDkU5EyXkFJuzOc8On98fn+82l21cO1y7dnjeb7fPba7P53N9Pq/rk/C83ieLYRgGIiIiIiIiIpLlnBxdgIiIiIiIiEhepdAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIi2e7IkSNYLBZmzpzp6FJERETsSqFbRETEjmbOnInFYknaPDw8uOeeexg0aBCnTp2yOvfIkSP07duXChUq4OHhgb+/P40bN+bNN9+0Oq9p06ZYLBYeeeSRFPdLDLMffPBB0r6IiAirGpydnSlevDihoaH89ddfd/0MHTp0oECBAly+fDnNc3r06IGbmxvnzp276/VERETyExdHFyAiIpIfjB07lnLlynHjxg02btzI1KlTWb58OX/++ScFChTg4MGD1K1bF09PT5566inKli1LZGQk27dv57333mPMmDEprrls2TK2bdtG7dq1barhxRdfpG7dusTGxrJ7926mTZtGREQEf/75J/7+/mm+r0ePHixdupRFixbRq1evFMevXbvG4sWLad26NUWKFLH9oYiIiOQDCt0iIiLZoE2bNtSpUweAp59+miJFivDRRx+xePFinnjiCT7++GOuXLnCzp07KVOmjNV7T58+neJ6QUFBXL58mTFjxrBkyRKbamjUqBGhoaFJrytXrsxzzz3HrFmz+L//+78039ehQwcKFSpEWFhYqqF78eLFXL16lR49ethUh4iISH6i7uUiIiIO8NBDDwFw+PBhAA4dOkTp0qVTBG6A4sWLp9hXqFAhXnrpJZYuXcr27dszVEOjRo2S7n0nnp6edO7cmbVr16b6BUBYWBiFChWiQ4cOnD9/nldeeYVq1arh5eWFt7c3bdq0YdeuXXetp2nTpjRt2jTF/j59+lC2bFmrfQkJCUycOJGqVavi4eFBiRIlePbZZ7lw4YLVeVu3bqVVq1YULVoUT09PypUrx1NPPXXXWkRERLKKQreIiIgDJAbdxO7YZcqU4fjx4/z88882X2Pw4MEULlyY0aNHZ6iGI0eOAFC4cOG7ntujRw/i4uL4/vvvrfafP3+eVatW0alTJzw9Pfn333/54YcfaN++PR999BGvvvoqe/bsoUmTJpw8eTJDdabm2Wef5dVXX+XBBx9k0qRJ9O3bl9mzZ9OqVStiY2MBs4fAww8/zJEjRxg2bBiTJ0+mR48ebN68OcvqEBERuRt1LxcREckG0dHRnD17lhs3bvDrr78yduxYPD09ad++PWCOt/72229p3rw5NWvWpEmTJjRr1oyWLVtSoECBVK/p7e3NkCFDePPNN9m+fTv333//HWu4fPkyZ8+eTRrTPWTIECwWC126dLlr/Q899BABAQGEhYUxaNCgpP3z588nNjY2qWt5tWrV+Oeff3BySv5e/8knn6RKlSp8/fXXjBw58q73upuNGzfy1VdfMXv2bLp37560v1mzZrRu3Zr58+fTvXt3fvvtNy5cuMDq1auTuvYDvP3225muQURExFZq6RYREckGLVq0oFixYgQGBtKtWze8vLxYtGgRpUqVAqBq1ars3LmTnj17cuTIESZNmsSjjz5KiRIl+PLLL9O8bmJrd2oTrd3uqaeeolixYpQsWZLWrVsTHR3Nt99+S926de/6XmdnZ7p168amTZuSWsjB7FpeokQJmjdvDoC7u3tS4I6Pj+fcuXN4eXlRuXLlDHeDv938+fPx8fGhZcuWnD17NmmrXbs2Xl5e/PLLLwD4+voC5oRzia3fIiIi2U2hW0REJBt89tln/PTTT/zyyy/s27ePf//9l1atWlmdc8899/Dtt99y9uxZdu/ezbvvvouLiwvPPPMMa9asSfW6Pj4+DBkyhCVLlrBjx4471jBq1Ch++umnpFnIo6OjrVqk7yaxNTssLAyA//77jw0bNtCtWzecnZ0Bc6z1xx9/TKVKlXB3d6do0aIUK1aM3bt3Ex0dbfO97uTAgQNER0dTvHhxihUrZrVduXIladx5kyZN6NKlC2PGjKFo0aJ07NiRGTNmEBMTkyV1iIiI2ELdy0VERLJBvXr1rLo434mzszPVqlWjWrVqhISE0KxZM2bPnk2LFi1SPX/w4MF8/PHHjBkzhokTJ6Z53WrVqiVd49FHH+XatWv079+fhg0bEhgYeNe6ateuTZUqVZgzZw4jRoxgzpw5GIZhNWv5u+++y8iRI3nqqad466238PPzw8nJiSFDhpCQkHDH61ssFgzDSLE/Pj7e6nVCQgLFixdn9uzZqV6nWLFiSdcLDw9n8+bNLF26lFWrVvHUU0/x4YcfsnnzZry8vO76mUVERDJLoVtERCQHSwzqkZGRaZ6T2No9evRoevfubfO1x48fz6JFi3jnnXeYNm2aTe/p0aMHI0eOZPfu3YSFhVGpUiWr7unh4eE0a9aMr7/+2up9Fy9epGjRone8duHChfn3339T7D969KjV6woVKrBmzRoefPBBPD0971pz/fr1qV+/Pu+88w5hYWH06NGDuXPn8vTTT9/1vSIiIpml7uUiIiI5wIYNG1Idd7x8+XLAXFP7ToYMGYKvry9jx461+Z4VKlSgS5cuzJw5k6ioKJvek9iqPWrUKHbu3JlibW5nZ+cUrdXz58/nxIkTNtXz999/c+bMmaR9u3bt4tdff7U67/HHHyc+Pp633norxTXi4uK4ePEiABcuXEhRS82aNQHUxVxERLKNWrpFRERygPfee49t27bRuXNnqlevDsD27duZNWsWfn5+DBky5I7v9/HxYfDgwTZNqHarV199le+//56JEycyfvz4u55frlw5GjRowOLFiwFShO727dszduxY+vbtS4MGDdizZw+zZ8+mfPnyd732U089xUcffUSrVq3o168fp0+fZtq0aVStWpVLly4lndekSROeffZZxo0bx86dO3n44YdxdXXlwIEDzJ8/n0mTJhEaGso333zDlClT6NSpExUqVODy5ct8+eWXeHt707Zt23Q9JxERkYxSS7eIiEgOMGLECLp06cL69et57bXXeOGFF1i5ciXdunVjy5YtlCtX7q7XGDJkCD4+Pum6b506dWjatClTp061eaKzxKBdr149KlasmOJzvPzyy6xatYrBgwezfft2fvzxR5vGjN97773MmjWL6Ohohg4dypIlS/j2229TXQpt2rRpfPHFF5w+fZoRI0YwfPhwfv75Z3r27MmDDz4ImOG8Tp06zJ07lxdffJH333+fSpUq8fPPP9v0PEVERLKCxUhtxhIRERERERERyTS1dIuIiIiIiIjYiUK3iIiIiIiIiJ0odIuI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czCFbhERERGRvOviRXMpsenTzddly8JXX0Hz5o6sSnKbLA/d9jB16lSmTp3KkSNHAKhatSqjRo2iTZs2ANy4cYOXX36ZuXPnEhMTQ6tWrZgyZQolSpS443X/+usvXnvtNdatW0dcXBzBwcEsWLCAoKAgm+pS6BYRERERyftWr4b+/eHYMfP100/DBx+Aj49j65LcIcsnUrOH0qVLM378eLZt28bWrVt56KGH6NixI3v37gXgpZdeYunSpcyfP59169Zx8uRJOnfufMdrHjp0iIYNG1KlShUiIiLYvXs3I0eOTDEeXURERERE8reHHzbX9U5cCfmrr6BqVfjxR8fWJXmLQ1u6U+Pn58eECRMIDQ2lWLFihIWFERoaCsDff//Nvffey6ZNm6hfv36q7+/WrRuurq58++23Ga5BLd0iIiIiIvnL+vXQrx8cPGi+7tkTJk6EIkUcWpbkYLmipftW8fHxzJ07l6tXrxISEsK2bduIjY2lRYsWSedUqVKFoKAgNm3alOo1EhIS+PHHH7nnnnto1aoVxYsX54EHHuCHxIX50hATE8OlS5esNhERERERyT8aN4Zdu+CVV8DJCb77DoKDITzc0ZVJbufw0L1nzx68vLxwd3dnwIABLFq0iODgYKKionBzc8PX19fq/BIlShAVFZXqtU6fPs2VK1cYP348rVu3ZvXq1XTq1InOnTuzbt26NGsYN24cPj4+SVtgYGBWfkQREREREckFChSACRPgt9/MwH36NDz2GISGwqlTjq5OciuHh+7KlSuzc+dOfv/9d5577jl69+7Nvn37MnSthIQEADp27MhLL71EzZo1GTZsGO3bt2fatGlpvm/48OFER0cnbcePH8/Q/UVEREREJPd74AHYvh3eeANcXGDBAjOEf/cd5KzBuZIbODx0u7m5UbFiRWrXrs24ceOoUaMGkyZNwt/fn5s3b3Lx4kWr80+dOoW/v3+q1ypatCguLi4EBwdb7b/33ns5ljglYSrc3d3x9va22kREREREJP9yd4e33oItW6BWLTh/Hp58Etq3h//+c3R1kps4PHTfLiEhgZiYGGrXro2rqytr165NOrZ//36OHTtGSEhIqu91c3Ojbt267N+/32r/P//8Q5kyZexat4iIiIiI5D01a8Lvv8M774CbGyxfbs5w/uWX1q3e8fEQEQFz5pg/4+MdVLDkOC6O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UiUaNGjAJ598wqxZs1KMz0504sQJdu/eTZs2baz2Fy9enDZt2iSNr54+fTpPPfVUivff7Z5+fn44OztTqFAh/P398ff3T3pvbGwsU6ZMoUGDBlSuXJkCBQpYXfvy5ctMmjSJ999/n969e1OhQgUaNmzI008/bfOzFxERsScXRxcgIiIiUKxYMdq1a8fMmTMxDIN27dpRtGjRpOOHDh0iNjaWBx98MGmfq6sr9erV46+//gLgr7/+4oEHHrC6bkhIiNXrXbt2sXv3bmbPnp20zzAMEhISOHz4MPfee2+K2pYsWULDhg1THUf91FNPMXjwYHr27MmmTZuYP38+GzZsyPQ9E7m5uVG9evU0j//111/ExMTQvHnzNM8RERFxJIVuERGRHOKpp55K6nL92Wef2eUeV65c4dlnn+XFF19McSytCdCWLFlChw4dUj3Wpk0bnnnmGfr168cjjzxCkSJFsuSeiTw9Pe84E7qnp+cd3y8iIuJoCt0iIiI5ROvWrbl58yYWi4VWrVpZHatQoQJubm78+uuvlClTBjC7Xm/ZsoUhQ4YAcO+997JkyRKr923evNnq9f3338++ffuoWLGiTTVduXKFX375halTp6Z63MXFhV69evH++++zYsWKVM+x5Z5ubm7Ex8fbVNOtKlWqhKenJ2vXrlWXchERyZE0pltERCSHcHZ25q+//mLfvn04OztbHStYsCDPPfccr776KitXrmTfvn3079+fa9eu0a9fPwAGDBjAgQMHePXVV9m/fz9hYWEp1rN+7bXX+O233xg0aBA7d+7kwIEDLF68OM2J1FauXMk999xD2bJl06z7rbfe4syZMym+KEjPPcuWLcv69es5ceIEZ8+eteFpmTw8PHjttdf4v//7P2bNmsWhQ4fYvHlz0jh3ERERR1NLt4iISA7i7e2d5rHx48eTkJDAk08+yeXLl6lTpw6rVq2icOHCgNlVe8GCBbz00ktMnjyZevXq8e6771pNbla9enXWrVvH66+/TqNGjTAMgwoVKtC1a9dU77l48eI0u5YncnNzsxp/fjtb7jl27FieffZZKlSoQExMDIZh3PGetxo5ciQuLi6MGjWKkydPEhAQwIABA2x+v4iIiD1ZjPT8rSYiIiL5RlxcHCVKlGDFihXUq1fP0eWIiIjkSupeLiIiIqk6f/48L730EnXr1nV0KSIiIrmWWrpFRERERERE7EQt3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIiIiIiJ2otAtIiIiIiIiYicK3SIiIpJt+vTpQ9myZR1dhoiISLZR6BYREckme/bsITQ0lDJlyuDh4UGpUqVo2bIlkydPtjrv5s2bTJo0iVq1auHt7Y2vry9Vq1blmWee4e+//046b+bMmVgsFrZu3Zq0b/To0VgsFpycnDh+/HiKGi5duoSnpycWi4VBgwalWev27duxWCy88cYbaZ5z4MABLBYLQ4cOTc9jEBERyVcUukVERLLBb7/9Rp06ddi1axf9+/fn008/5emnn8bJyYlJkyZZndulSxdefvll7rvvPsaPH8+YMWNo3LgxK1asYPPmzTbdz93dnTlz5qTYv3DhQpvef//991OlSpVUr5EoLCwMgJ49e9p0TRERkfzIxdEFiIiI5AfvvPMOPj4+bNmyBV9fX6tjp0+fTvr1li1bWLZsGe+88w4jRoywOu/TTz/l4sWLNt2vbdu2zJkzh//7v/+z2h8WFka7du1YsGDBXa/Ro0cPRo4cyebNm6lfv36K43PmzKFKlSrcf//9NtUkIiKSH6mlW0REJBscOnSIqlWrpgjcAMWLF7c6D+DBBx9McZ6zszNFihSx6X7du3dn586dVt3Ro6Ki+Pnnn+nevbtN1+jRoweQ3KJ9q23btrF///6kcxYvXky7du0oWbIk7u7uVKhQgbfeeov4+Pg73iMiIgKLxUJERITV/iNHjmCxWJg5c6bV/r///pvQ0FD8/Pzw8PCgTp06LFmyxOqc2NhYxowZQ6VKlfDw8KBIkSI0bNiQn376yabPLSIikpUUukVERLJBmTJl2LZtG3/++eddzwOYPXs2cXFxGb5f48aNKV26tFVgnjdvHl5eXrRr186ma5QrV44GDRrw/fffpwjPiddNDPAzZ87Ey8uLoUOHMmnSJGrXrs2oUaMYNmxYhj/D7fbu3Uv9+vX566+/GDZsGB9++CEFCxbk0UcfZdGiRUnnjR49mjFjxtCsWTM+/fRTXn/9dYKCgti+fXuW1SIiImIrdS8XERHJBq+88gpt2rShZs2a1KtXj0aNGtG8eXOaNWuGq6tr0nn169enSZMmfPnllyxZsoSHHnqIhg0b0r59e4KCgmy+n8VioVu3bsyZM4exY8cCZpDv3Lkz7u7uNl+nR48eDBw4kLVr1/Lwww8DkJCQwLx58wgJCaF8+fKAGcI9PT2T3jdgwAAGDBjAlClTePvtt9N1z7QMHjyYoKAgtmzZknS9559/noYNG/Laa6/RqVMnAH788Ufatm3LF198kel7ioiIZJZaukVERLJBy5Yt2bRpEx06dGDXrl28//77tGrVilKlSll1j7ZYLKxatYq3336bwoULM2fOHAYOHEiZMmXo2rWrzWO6wWyFPnjwIFu2bEn6aWvX8kRdu3bF1dXVqsV83bp1nDhxIqlrOWAVuC9fvszZs2dp1KgR165ds+rinlHnz5/n559/5vHHH0+6/tmzZzl37hytWrXiwIEDnDhxAgBfX1/27t3LgQMHMn1fERGRzFLoFhERySZ169Zl4cKFXLhwgT/++IPhw4dz+fJlQkND2bdvX9J57u7uvP766/z111+cPHmSOXPmUL9+fb7//vs7LvN1u1q1alGlShXCwsKYPXs2/v7+PPTQQ+mquUiRIrRq1YpFixZx48YNwGzVdnFx4fHHH086b+/evXTq1AkfHx+8vb0pVqxY0qzm0dHR6bpnag4ePIhhGIwcOZJixYpZbW+++SaQPCHd2LFjuXjxIvfccw/VqlXj1VdfZffu3ZmuQUREJCMUukVERLKZm5sbdevW5d1332Xq1KnExsYyf/78VM8NCAigW7durF+/nkqVKvH999+na6x39+7dmTdvHmFhYXTt2hUnp/T/1d+zZ08uXbrEsmXLuHnzJgsWLODhhx+mWLFiAFy8eJEmTZqwa9cuxo4dy9KlS/npp5947733ALM7elosFkuq+28fQ554jVdeeYWffvop1a1ixYqAOZ790KFDTJ8+nfvuu4+vvvqK+++/n6+++irdn11ERCSzNKZbRETEgerUqQNAZGTkHc9zdXWlevXqHDhwgLNnz+Lv72/T9bt3786oUaOIjIzk22+/zVCNHTp0oFChQoSFheHq6sqFCxesupZHRERw7tw5Fi5cSOPGjZP2Hz58+K7XLly4MECKbvNHjx61ep04dtzV1ZUWLVrc9bp+fn707duXvn37cuXKFRo3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6fSfVlcFFBluh+527dpp2rRpjuc2m012u11jx45Vx44d3S7gvffe09ChQzVw4EDVr19fEyZMUFhYmCZPnpznMTabTdHR0Y4lKioqxz6HDh3So48+qi+++EKBgYFu1wUAAADgguhOUpeVUulaUupeaUFr6dBcq6sCigS3Q/fYsWP1r3/9S926dVNGRoaefvppNWjQQL/++qveeustt86VkZGhNWvWqFOnTpcK8vNTp06dtGLFijyPO3v2rKpVq6a4uDj17NlTmzZtctput9vVt29fPfXUU7r++uuvWkd6erpSUlKcFgAAAACXCa9rBu9KHaSsM9Kvt0tb35e4ixGQL7dDd4MGDbR9+3a1bdtWPXv2VGpqqu666y6tW7dONWvWdOtcx48fV3Z2do6e6qioKCUlJeV6TN26dTV58mTNnj1bn3/+uex2u1q3bq2DBw869nnrrbcUEBCgxx57zKU6xowZo4iICMcSFxfn1vsAAAAASoTg8lLH+VLNIZJhl9aOkFY/KNkzra4M8FkBBTkoIiJCzz//vKdrcUmrVq3UqlUrx/PWrVurXr16+vTTT/Xqq69qzZo1+uCDD7R27VrZXLylwciRIzVixAjH85SUFII3AAAAkBv/IKnFv8x7ea99Qto1UTq7U2r7tRRczurqAJ/jduj+9ddf891+0003uXyuChUqyN/fX0eOHHFaf+TIEUVHR7t0jsDAQDVp0kQ7d+6UJC1ZskRHjx5V1apVHftkZ2friSee0Lhx47R3794c5wgODi7QJHAAAABAiWSzSdc9LpWpY97P+8gv0oKWUvvvpfA6VlcH+BS3Q3eHDh1yrLu8Rzk7O9vlcwUFBalp06ZauHCh7rjjDknm9dgLFy7UI4884tI5srOztXHjRnXv3l2S1LdvX6drxCWpS5cu6tu3rwYOHOhybQAAAACuovJt0q3LpcW3S2d2mDObt/tair7F6soAn+F26D516pTT88zMTK1bt04vvviiXn/9dbcLGDFihPr3769mzZqpRYsWGjdunFJTUx0BuV+/fqpcubLGjBkjSRo9erRatmypWrVq6fTp03r77be1b98+DRkyRJJUvnx5lS9f3uk1AgMDFR0drbp167pdHwAAAIB8RN4gdVkt/XqHdHyF9EsXqdl4qfaDVlcG+AS3Q3dERESOdZ07d1ZQUJBGjBihNWvWuHW+Xr16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KbT36gvGjx+v+Ph4hYSEKCEhQatXr85z302bNumvf/2r4uPjZbPZNG7cuMIrtAhwpy0nTpyodu3aqWzZsipbtqw6deqU7/4ljTttOWvWLDVr1kyRkZEqVaqUGjdurP/85z+FWK3vcqcdLzd9+nTZbDbdcccd3i2wCHGnLadOner0+WKz2RQSElKI1fo2d38vT58+rYcfflgxMTEKDg5WnTp1NHfu3EKq1ne5044dOnTI8Ttps9l02223FWLFvsvd38lx48apbt26Cg0NVVxcnB5//HGdP3++kKr1be60ZWZmpkaPHq2aNWsqJCREjRo10rx58wqxWs+6PMNcvnTt2lWS9Mcff6hHjx6qVKmSQkJCFB8fr169euno0aOS3MsmKSkpevHFF3X99dcrNDRU5cuXV/PmzTV27FidOnUqx/5fffWV/P399fDDD+fYtmjRItlsNl1//fXKzs522hYZGampU6d6oHXyYcAS/fv3N7p27WokJiYae/fuNT7++GPDZrMZb7zxhjFp0iQjLCzM+Pe//23s2LHD+PPPP40vv/zSeO655xzHjxo1yggJCTECAgKM7du3O9avW7fOkGTs2bPHMAzD2LNnjyHJ+Omnn4zExERj48aNRu/evY3w8HAjKSmpsN+2JaZPn24EBQUZkydPNjZt2mQMHTrUiIyMNI4cOZLr/qtXrzaefPJJ46uvvjKio6ON999/v3AL9mHutuXf/vY3Y/z48ca6deuMLVu2GAMGDDAiIiKMgwcPFnLlvsfdtvzll1+MWbNmGZs3bzZ27txpjBs3zvD39zfmzZtXyJX7Fnfb8aI9e/YYlStXNtq1a2f07NmzcIr1ce625ZQpU4zw8HAjMTHRsZSUz5Wrcbct09PTjWbNmhndu3c3li5dauzZs8dYtGiRsX79+kKu3Le4244nTpxw+n38888/DX9/f2PKlCmFW7gPcrctv/jiCyM4ONj44osvjD179hjz5883YmJijMcff7yQK/c97rbl008/bcTGxhr/+9//jF27dhkff/yxERISYqxdu7aQK/eMyzPM5cvJkyeNo0ePGuXLlzf69+9vrF271ti9e7fx888/G8OHDzd2795tGIbr2eTEiRNGvXr1jMqVKxuTJ082/vjjD2Pv3r3G/Pnzjd69exv//Oc/c9R2yy23GM8++6xRtmxZIy0tzWnbL7/8YkgyQkJCjMmTJztti4iI8Pq/E4Rui/Tv3z/HH3qdO3c2WrZsafTs2dMYMGBAvsePGjXKaNSokdG5c2fjnnvucazPK3SvW7fOsc+GDRsMScbs2bM99XZ8WosWLYyHH37Y8Tw7O9uIjY01xowZc9Vjq1WrRui+zLW0pWEYRlZWllGmTBnjs88+81aJRca1tqVhGEaTJk2MF154wRvlFRkFacesrCyjdevWxr///e9c/y0uqdxtyylTphgRERGFVF3R4m5bfvLJJ0aNGjWMjIyMwiqxSLjWfyfff/99o0yZMsbZs2e9VWKR4W5bPvzww8bNN9/stG7EiBFGmzZtvFpnUeBuW8bExOQIiHfddZdx//33e7VOb8nvc/Obb74xAgICjMzMzDyPdzWbPPjgg0apUqWMQ4cO5Xoeu93u9Hz37t1GaGiocfr0aSMhIcH44osvnLZfDN1PPfWUERcXZ5w/f96xrTBCN8PLfUhoaKgyMjIUHR2tlStXat++fVc95s0339TMmTP1+++/u/QaaWlpmjZtmiQpKCjomuotCjIyMrRmzRp16tTJsc7Pz0+dOnXSihUrLKys6PFEW547d06ZmZkqV66ct8osEq61LQ3D0MKFC7Vt2zbddNNN3izVpxW0HUePHq1KlSpp8ODBhVFmkVDQtjx79qyqVaumuLg49ezZU5s2bSqMcn1aQdpyzpw5atWqlR5++GFFRUWpQYMGeuONN3IMgSxJPPGZM2nSJPXu3VulSpXyVplFQkHasnXr1lqzZo1j2PTu3bs1d+5cde/evVBq9lUFacv09PQcl96EhoZq6dKlXq3VCtHR0crKytI333wjw8W7UueWTex2u2bMmKE+ffooNjY21+NsNpvT8ylTpui2225TRESE+vTpo0mTJuV63PDhw5WVlaWPPvrI1bflEYRuH2AYhn766SfNnz9fN998s0aNGqXIyEjFx8erbt26GjBggP7v//5Pdrs9x7E33nij7r33Xj3zzDP5vkbr1q1VunRplSpVSu+8846aNm2qW265xVtvyWccP35c2dnZioqKclofFRWlpKQki6oqmjzRls8884xiY2OdPqxKooK2ZXJyskqXLq2goCDddttt+uijj9S5c2dvl+uzCtKOS5cu1aRJkzRx4sTCKLHIKEhb1q1bV5MnT9bs2bP1+eefy263q3Xr1jp48GBhlOyzCtKWu3fv1tdff63s7GzNnTtXL774ot5991299tprhVGyT7rWz5zVq1frzz//1JAhQ7xVYpFRkLb829/+ptGjR6tt27YKDAxUzZo11aFDBz333HOFUbLPKkhbdunSRe+995527Nghu92uH3/8UbNmzVJiYmJhlOwV33//vUqXLu20vPHGG2rZsqWee+45/e1vf1OFChXUrVs3vf322zpy5EiOc+SXTY4dO6bTp0+rbt26Tsc0bdrU8Xr33XefY73dbtfUqVPVp08fSVLv3r21dOlS7dmzJ8frhoWFadSoURozZoySk5M92Sz5InRb6OIvbEhIiLp166ZevXrp5ZdfVkxMjFasWKGNGzfqH//4h7KystS/f3917do11+D92muvacmSJVqwYEGerzVjxgytW7dOM2fOVK1atTR16lQFBgZ68+0BTt58801Nnz5d33zzDZMtFVCZMmW0fv16/fbbb3r99dc1YsQILVq0yOqyiowzZ86ob9++mjhxoipUqGB1OUVeq1at1K9fPzVu3Fjt27fXrFmzVLFiRX366adWl1bk2O12VapUSf/617/UtGlT9erVS88//7wmTJhgdWlF1qRJk3TDDTeoRYsWVpdSJC1atEhvvPGGPv74Y61du1azZs3S//73P7366qtWl1bkfPDBB6pdu7auu+46BQUF6ZFHHtHAgQPl51d0Y1jHjh21fv16p+Xi5M6vv/66kpKSNGHCBF1//fWaMGGCrrvuOm3cuNHpHAXJJt98843Wr1+vLl26KC0tzbH+xx9/VGpqqmMkRoUKFdS5c2dNnjw51/MMHjxY5cuX11tvvXUtzeCWgEJ7JeTQsWNHffLJJwoKClJsbKwCApz/czRo0EANGjTQQw89pGHDhqldu3ZavHixOnbs6LRfzZo1NXToUD377LN5DqWIi4tT7dq1Vbt2bWVlZenOO+/Un3/+qeDgYK+9P19QoUIF+fv75/iG7ciRI4qOjraoqqLpWtrynXfe0ZtvvqmffvpJDRs29GaZRUJB29LPz0+1atWSJDVu3FhbtmzRmDFj1KFDB2+W67Pcbcddu3Zp7969uv322x3rLn6RGRAQoG3btqlmzZreLdpHeeLfysDAQDVp0kQ7d+70RolFRkHaMiYmRoGBgfL393esq1evnpKSkpSRkVEiLge70rX8Tqampmr69OkaPXq0N0ssMgrSli++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",
      "text/plain": [
       "<Figure size 1000x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 数据\n",
    "labels = ['PSNR','0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9', 'ESRGAN']\n",
    "PSNR_values = [31.37, 31.49, 31.36, 31.23, 31.14, 31.10, 31.10, 30.97, 30.82, 30.56, 30.13]\n",
    "SSIM_values = [0.5663, 0.5793, 0.5772, 0.5740, 0.5729, 0.5712, 0.5668, 0.5585, 0.5440, 0.5197\n",
    ", 0.4801]\n",
    "\n",
    "# 创建两个图表\n",
    "fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))\n",
    "\n",
    "# 第一个图表显示PSNR值\n",
    "ax1.plot(labels, PSNR_values, marker='o', color='blue', label='PSNR')\n",
    "ax1.set_title('PSNR Values')\n",
    "ax1.set_xlabel('Model/Metric')\n",
    "ax1.set_ylabel('PSNR Value')\n",
    "ax1.legend()\n",
    "\n",
    "# 第二个图表显示SSIM值\n",
    "ax2.plot(labels, SSIM_values, marker='o', color='orange', label='SSIM')\n",
    "ax2.set_title('SSIM Values')\n",
    "ax2.set_xlabel('Model/Metric')\n",
    "ax2.set_ylabel('SSIM Value')\n",
    "ax2.legend()\n",
    "\n",
    "# 调整布局\n",
    "plt.tight_layout()\n",
    "\n",
    "# 显示图表\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "85e96134",
   "metadata": {},
   "source": [
    "## 420张"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "331492b2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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/PjxmjZt2j3vW7169aR7dOzYUVFRURo4cKAaNWqkwMDAB9ZVp04dVapUSQsXLtSoUaO0cOFCGYZhNZv5pEmTNHr0aPXv31/vvPOOChYsKCcnJw0fPlwJCQn3vb/FYpFhGCn2x8fHW71OSEiQv7+/5s+fn+p9ihQpknS/pUuXavv27Vq1apXWrVun/v3767///a+2b98uLy+vB35mAAAyA8EbAIBsLDGsh4aG3vOcxFbvcePGqU+fPjbfe8qUKVq+fLkmTpyomTNn2nRNr169NHr0aO3fv18LFixQ+fLlrbqqL126VM2bN9esWbOsrrt+/boKFy5833sXKFBAJ0+eTLH/zJkzVq+DgoL0888/q2HDhvL09HxgzY8++qgeffRRTZw4UQsWLFCvXr20aNEiPffccw+8FgCAzEBXcwAAsoEtW7akOg55zZo1ksw1t+9n+PDh8vPz04QJE2x+z6CgIHXp0kVz585VWFiYTdcktm6PGTNGe/fuTbF2t7Ozc4pW6yVLluj8+fM21fPHH3/o0qVLSfv27dunX375xeq8bt26KT4+Xu+8806Ke8TFxen69euSpGvXrqWopVatWpJEd3MAQJaixRsAgGzgvffe065du9S5c2fVqFFDkrR792599dVXKliwoIYPH37f6319fTVs2DCbJlm70+uvv65vvvlG06ZN05QpUx54ftmyZdWgQQOtWLFCklIE7yeeeEITJkxQv3791KBBAx04cEDz58/XQw899MB79+/fXx988IHatGmjAQMG6OLFi5o5c6aqVq2qiIiIpPOaNm2qF154QZMnT9bevXv12GOPydXVVceOHdOSJUs0ffp0de3aVfPmzdOnn36qTp06KSgoSJGRkfriiy/k4+Oj9u3bp+k5AQCQEbR4AwCQDYwaNUpdunTR5s2b9eabb+rf//631q5dqx49emjHjh0qW7bsA+8xfPhw+fr6pul969atq2bNmmnGjBk2T36WGLbr16+vcuXKpfgcr776qtatW6dhw4Zp9+7d+v77720aQ165cmV99dVXCg8P1yuvvKKVK1fq66+/TnWZtJkzZ+rzzz/XxYsXNWrUKI0cOVIbNmxQ79691bBhQ0lmQK9bt64WLVqkoUOH6v3331f58uW1YcMGm54nAACZxWKkNosJAAAAAADIFLR4AwAAAABgRwRvAAAAAADsiOANAAAA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MAwjLi7O8Pb2NubNm2evEnOMjD5LwzCM2rVrG2+//bY9yssx0vMc4+LijAYNGhhffvllqn8W51VpfZZz5swxfH19s6i6nCWtz3LGjBnGQw89ZNy+fTurSswRMvrn5Icffmh4e3sbN27csFeJOUZan+XgwYONFi1aWO175ZVXjIYNG9q1zpwgrc8yICAgRUjs3Lmz0atXL7vWaS/3+3tz+fLlhouLixEbG3vP623NJi+88IKRP39+4/z586neJyEhwer1yZMnDU9PT+P69evGI488YsyfP9/qeGLwfv31143AwEAjOjo66VhWBW+6mmcjnp6eun37tooVK6bt27frzJkzD7xmypQp+vbbb7Vz506b3uPWrVv66quvJElubm4ZqjcnuH37tnbt2qVWrVol7XNyclKrVq20bds2B1aW82TGs4yKilJsbKwKFixorzJzhIw+S8MwtH79eh09elRNmjSxZ6nZWnqf44QJE+Tv768BAwZkRZk5Qnqf5Y0bN1S6dGkFBgaqQ4cOOnToUFaUm62l51muXLlSwcHBGjx4sIoWLapq1app0qRJKbpD5iWZ8XfOrFmz1KNHD+XPn99eZeYI6XmWDRo00K5du5K6UJ88eVJr1qxR+/bts6Tm7Co9zzImJibFMBxPT09t3brVrrU6QrFixRQXF6fly5fLMAybrkktmyQkJGjx4sXq3bu3ihcvnup1FovF6vWcOXP0+OOPy9fXV71799asWbNSvW748OGKi4vTRx99ZOvHyjQE72zAMAz9/PPPWrdunVq0aKGxY8fKz89PZcqUUcWKFdW3b1998803SkhISHHtww8/rG7duunNN9+873s0aNBAXl5eyp8/v/7zn/+oTp06atmypb0+UrZx+fJlxcfHq2jRolb7ixYtqrCwMAdVlTNlxrN88803Vbx4cau/sPKi9D7L8PBweXl5yc3NTY8//rg++ugjtW7d2t7lZlvpeY5bt27VrFmz9MUXX2RFiTlGep5lxYoVNXv2bK1YsUL/+9//lJCQoAYNGuivv/7KipKzrfQ8y5MnT2rp0qWKj4/XmjVrNHr0aP33v//Vu+++mxUlZ0sZ/Tvn999/18GDB/Xcc8/Zq8QcIz3PsmfPnpowYYIaNWokV1dXBQUFqVmzZho1alRWlJxtpedZtmnTRh988IGOHTumhIQE/fTTT1q2bJlCQ0Oz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VvPmzdPu3btVrlw5tWnTRlevXpUknTt3Tp07d9aTTz6pvXv36rnnntOIESOs7nHixAm1bdtWXbp00f79+7V48WJt3bpVQ4YMuW99K1euVIcOHaz2PfPMM9qyZYvOnj0rSfr2229VpkwZPfzww2l6z2XLlqlkyZKaMGGCQkNDFRoamnRtVFSU3nvvPX355Zc6dOiQ/P39U9Q2cuRITZkyRaNHj9bhw4e1YMECFS1a9L6fBwCArETwBgAgG+jdu7e2bt2qM2fO6MyZM/rll1/Uu3fvpOM3b97UjBkzNHXqVLVr105VqlTRF198IU9PT82aNUuSNGPGDAUFBem///2vKlasqF69eqUYHz558mT16tVLw4cPV/ny5dWgQQP93//9n7766qsU47UTnT9/Xvv371e7du2s9vv7+6tdu3ZJ461nz56t/v37p7j+Qe9ZsGBBOTs7y9vbW8WKFVOxYsWSro2NjdWnn36qBg0aqGLFisqXL5/VvSMjIzV9+nS9//776tOnj4KCgtSoUSM999xzNj97AADszcXRBQAAAKlIkSJ6/PHHNXfuXBmGoccff1yFCxdOOn7ixAnFxsaqYcOGSftcXV1Vv359HTlyRJJ05MgRPfLII1b3DQ4Otnq9b98+7d+/X/Pnz0/aZxiGEhISdOrUKVWuXDlFbStXrlSjRo1SHVfdv39/DRs2TL1799a2bdu0ZMkSbdmyJcPvmcjNzU01atS45/EjR44oJiZGLVu2vOc5AAA4GsEbAIBson///kndrz/55BO7vMeNGzf0wgsvaOjQoSmO3WtStJUrV+qpp55K9Vi7du30/PPPa8CAAXryySdVqFChTHnPRJ6envedId3T0/O+1wMAkB0QvAEAyCbatm2r27dvy2KxqE2bNlbHgoKC5Obmpl9++UWlS5eWZHbD3rFjh4YPHy5Jqly5slauXGl13fbt261eP/zwwzp8+LDKlStnU003btzQxo0bNWPGjFSPu7i46Nlnn9X777+vH374IdVzbHlPNzc3xcfH21TTncqXLy9PT0+tX7+e7uUAgGyLMd4AAGQTzs7OOnLkiA4fPixnZ2erY/nz59eLL76o119/XWvXrtXhw4c1cOBARUVFacCAAZKkQYMG6dixY3r99dd19OhRLViwIMV612+++aZ+/fVXDRkyRHv37tWxY8e0YsWKe06utnbtWlWo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TWO/e/bsqcWLF2vBggXq3r27nJzS/ld/7969FRERodWrV+v27dv69ttv9dhjj6lIkSKSpOvXr6tp06bat2+fJkyYoFWrVumnn37Se++9J8nsmn4vFosl1f13jylPvMdrr72mn376KdWtXLlykszx7SdOnNDs2bNVrVo1ffnll3r44Yf15ZdfpvmzAwCQGRjjDQCAA9WtW1eSFBoaet/zXF1dVaNGDR07dkyXL19WsWLFbLp/z549NWbMGIWGhurrr79OV41PPfWUvL29tWDBArm6uuratWtW3cxDQkJ05coVLVu2TE2aNEnaf+rUqQfeu0CBApKUogv9mTNnrF4njiV3dXVVq1atHnjfggULql+/furXr59u3LihJk2aaNy4cXruueceeC0AAJmNFm8AALLAxo0bZRhGiv1r1qyRJFWsWFGSdOzYMZ09ezbFedevX9e2bdtUoECBpJZmWwQFBWnatGmaPHmy6tevn67aPT091alTJ61Zs0YzZsxQ/vz51aFDh6Tjzs7OkmT1+W7fvq1PP/30gfcuXbq0nJ2dtXnzZqv9d1/r7++vZs2a6bPPPkv1S4pLly4l/frKlStWx7y8vFSuXDnFxMQ8sB4AAOyBFm8AALLAv//9b0VFRalTp06qVKmSbt++rV9//VWLFy9WmTJl1K9fP0nSvn371LNnT7Vr106NGzdWwYIFdf78ec2bN08XLlzQtGnTkoKurYYNG5bh+nv37q2vvvpK69atU69evZQ/f/6kYw0aNFCBAgXUp08fDR06VBaLRV9//XWqXzTczdfXV08//bQ++ugjWSwWBQUFafXq1Unjte/0ySefqFGjRqpevboGDhyohx56SH///be2bdumv/76S/v27ZMkValSRc2aNVOdOnVUsGBB7dy5U0uXLk3T+HgAADITwRsAgCzwn//8R0uWLNGaNWv0+eef6/bt2ypVqpReeuklvf322/Lz85Nkjk9+55139MMPP+iDDz7QpUuX5O3trdq1a+u9995Tly5dHFJ/ixYtFBAQoNDQUKtu5pI5Advq1av16quv6u2331aBAgXUu3dvtWzZUm3atHngvT/66CPFxsZq5syZcnd3V7du3TR16lRVq1bN6rwqVapo586dGj9+vObOnasrV67I399ftWvX1pgxY5LOGzp0qFauXKkff/xRMTExKl26tN599129/vrr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UqlSpRQaGqp33nlHTZs21S233OKuS/IYR44cUU5OjiIiInK1R0REKCUlxaKqvJMr+nLYsGGKjo7O9RdWSXS1fZmWlqZSpUopICBAXbp00QcffKBbb73V3eV6rKvpx6SkJMXHx2vSpElFUaLXuJq+rFOnjiZPnqx58+bpv//9r+x2u1q1aqUDBw4URcke62r6cteuXZo1a5ZycnL0/fffa+TIkfrXv/6l1157rShK9kiF/Ttn+fLl2rBhgx566CF3leg1rqYv77//fo0ZM0Zt2rSRv7+/atSoofbt2+sf//hHUZTssa6mLzt27Kh3331X27dvl91u1w8//KA5c+YoOTm5KEp2i2+//ValSpXKtY0dO1YtWrTQP/7xD91///2qUKGCbr/9dr399ts6dOhQnnNcLpukpqbqxIkTqlOnTq5jmjZt6vi+++67z9Fut9s1ZcoU9enTR5LUu3dvJSUlaffu3Xm+NyQkRKNHj9a4ceOUlpbmym65IoK3hS780AYFBen2229Xr1699PLLLysqKkpLly7V+vXr9cwzzyg7O1v9+/dXp06d8g3fr732mhYvXqyFCxde8rtmzpyp1atXa/bs2apZs6amTJkif39/d14ekMsbb7yhGTNmaO7cuUzAdJVKly6tNWvWaMWKFXr99dc1dOhQLVq0yOqyvMbJkyfVt29fTZo0SRUqVLC6HK/XsmVL9evXT40aNVK7du00Z84cVaxYUf/3f/9ndWlex263q1KlSvrPf/6jpk2bqlevXnrppZc0ceJEq0vzWvHx8WrQoIGaN29udSleadGiRRo7dqw++ugjrVq1SnPmzNF3332nV1991erSvM57772nWrVq6dprr1VAQICefPJJDRw4UD4+3hvDbrrpJq1ZsybXdmHC59dff10pKSmaOHGirrvuOk2cOFHXXnut1q9fn+scV5NN5s6dqzVr1qhjx446c+aMo/2HH35QRkaG44mMChUq6NZbb9XkyZPzPc+gQYNUvnx5vfnmm4XpBqf5Fem3IZebbrpJH3/8sQICAhQdHS0/v9z/c9SvX1/169fXE088occee0xt27bVL7/8optuuinXfjVq1NDDDz+s4cOHX/KxipiYGNWqVUu1atVSdna27rrrLm3YsEGBgYFuuz5PUKFCBfn6+ub5TduhQ4cUGRlpUVXeqTB9+c477+iNN97Qjz/+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",
      "text/plain": [
       "<Figure size 1000x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 数据\n",
    "labels = ['PSNR','0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9', 'ESRGAN']\n",
    "PSNR_values = [32.3, 32.27, 32.17, 32.05, 31.95, 31.87, 31.80, 31.72, 31.59, 31.35, 30.98]\n",
    "SSIM_values = [0.7701, 0.7711, 0.7706, 0.7690, 0.7663, 0.7619, 0.7549, 0.7440, 0.7275, 0.7034, 0.6682]\n",
    "\n",
    "\n",
    "# 创建两个图表\n",
    "fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))\n",
    "\n",
    "# 第一个图表显示PSNR值\n",
    "ax1.plot(labels, PSNR_values, marker='o', color='blue', label='PSNR')\n",
    "ax1.set_title('PSNR Values')\n",
    "ax1.set_xlabel('Model/Metric')\n",
    "ax1.set_ylabel('PSNR Value')\n",
    "ax1.legend()\n",
    "\n",
    "# 第二个图表显示SSIM值\n",
    "ax2.plot(labels, SSIM_values, marker='o', color='orange', label='SSIM')\n",
    "ax2.set_title('SSIM Values')\n",
    "ax2.set_xlabel('Model/Metric')\n",
    "ax2.set_ylabel('SSIM Value')\n",
    "ax2.legend()\n",
    "\n",
    "# 调整布局\n",
    "plt.tight_layout()\n",
    "\n",
    "# 显示图表\n",
    "plt.show()\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
